[Python] Comment gérer inf et NaN à une moyenne numpy, écart type, maximum / minimum

Problèmes survenus

Pour la sortie d'un logiciel de traitement d'image (évaluation d'image) utilisant numpy dans python3, Inf et NaN sont inclus dans la moyenne, l'écart type, le maximum et le minimum.

sample_code.py


import numpy as np
img = #En quelque sorte un tableau d'images

print(np.max(img))
print(np.min(img))
print(np.mean(img))
print(np.std(img))

>inf
>-inf
>NaN
>NaN

Comme ça J'étais assez accro à ça

Que sont inf et NaN?

En premier lieu, qu'est-ce que inf ou NaN **? (Gekiuma Gaku) Quand j'ai recherché, beaucoup d'informations sont sorties. inf Abréviation pour l'infini. Représente l'infini. -inf est l'infini négatif, n'est-ce pas?

NaN

Les nombres à virgule flottante ont un nombre spécial appelé NaN (Not a Number) qui représente des valeurs réelles anormales. Cela se produit lorsque vous effectuez des formes indéfinies telles que l'infini-infini, 0,0 / 0,0 ou des calculs qui ne peuvent pas être représentés par des nombres réels, tels que la racine carrée d'un nombre négatif ou le logarithme d'un nombre négatif.

De NaN Story

Je crois comprendre que les valeurs (nombres) que vous ne souhaitez pas prendre en compte ou exclure lors du calcul sont reconnues.

Contre-mesure

1. Remplacez inf par NaN

sample_code.py


import numpy as np
img = #En quelque sorte un tableau d'images

img[img == -np.inf] = np.nan
img[img == np.inf] = np.nan

Maintenant inf disparaît du tableau. Allons-nous en

2. Utilisez une fonction qui considère NaN

sample_code.py


import numpy as np
img = #En quelque sorte un tableau d'images

img[img == -np.inf] = np.nan
img[img == np.inf] = np.nan

le minimum,maximum= np.nanmax(img), np.nanmin(img)
moyenne= np.nanmean(img)
écart-type= np.nanstd(img)

#Il y a aussi des totaux et des écarts

Référence: https://note.nkmk.me/python-numpy-nansum/

3. Histoire pour approfondir la compréhension

Je parle de quel type de traitement cela est fait. Lors du calcul du maximum et de la moyenne, ** excluez l'élément NaN **. Par exemple, dans le cas du calcul de la moyenne, il n'est pas inclus dans la valeur totale de l'ensemble et n'est pas inclus dans le nombre d'éléments.

Une image qui supprime NaN de la séquence. Alors vous pensez peut-être que vous devriez le supprimer, mais ce n'est pas le cas avec le traitement d'image. Si vous le supprimez, ce sera le même que la taille verticale et horizontale de l'image.

Pour le moment, si vous divisez par 0 ou divisez par 0, inf et NaN seront inclus, donc Est-ce un sentiment que le logiciel qui effectue un tel traitement devrait essentiellement effectuer le traitement ci-dessus?

Épilogue

C'était assez difficile de le remarquer. J'automatise souvent le travail de traitement d'image comme je le fais avec imageJ. J'ai remarqué que le résultat de sortie du logiciel et le résultat traité par imageJ étaient différents. J'ai senti que inf serait exclu. Est-ce du bon sens dans le monde du traitement d'images?

Recommended Posts

[Python] Comment gérer inf et NaN à une moyenne numpy, écart type, maximum / minimum
Comment gérer le japonais avec Python
Comment utiliser is et == en Python
Comment générer une séquence en Python et C ++
Comment générer "Ketsumaimo" en standard en Python
Comment gérer le type datetime dans sqlite3 de python
Comment tracer l'autocorrélation et l'autocorrélation partielle avec Python
Calcul de l'écart type et du coefficient de corrélation en Python
[Python] Comment trier un dict dans une liste et une instance dans une liste
Calculer la moyenne, la médiane, la plus fréquente, la variance, l'écart type en Python
Comment gérer JSON en Ruby, Python, JavaScript, PHP
Comment déboguer une bibliothèque Python standard dans Visual Studio
Comment échanger des éléments dans un tableau en Python et comment inverser un tableau.
[Introduction à l'application Udemy Python3 +] 36. Utilisation de In et Not
Pour aller et venir entre python standard, numpy, pandas ①
Un moyen standard de développer et de distribuer des packages en Python
Comparaison de l'utilisation des fonctions d'ordre supérieur dans Python 2 et 3
[Blender] Comment gérer les événements de souris et de clavier dans les scripts Blender
Comment exécuter des commandes et des scripts shell externes en python
Comment se connecter à AtCoder avec Python et soumettre automatiquement
[Python] Comment faire PCA avec Python
Comment gérer une session dans SQLAlchemy
Comment installer OpenCV sur Cloud9 et l'exécuter en Python
Comment collecter des images en Python
Comment utiliser SQLite en Python
Comment utiliser Mysql avec python
[ROS2] Comment décrire le remappage et les paramètres au lancement au format python
Comment envelopper C en Python
Comment utiliser ChemSpider en Python
Comment utiliser PubChem avec Python
Comment afficher les octets de la même manière en Java et Python
Comment écrire le bon shebang dans les scripts Perl, Python et Ruby
Comment obtenir la différence de date et d'heure en secondes avec Python
[Python] Comment mettre n'importe quel nombre d'entrées standard dans la liste
Comment mettre un espace demi-largeur avant les lettres et les chiffres en Python.
[Python] Comment utiliser la liste 2 Référence de la valeur de la liste, nombre d'éléments, valeur maximale, valeur minimale
Comment trier en spécifiant une colonne dans le tableau Python Numpy.
Comment arrêter le programme jusqu'à une date et une heure spécifiques en python
Comment empaqueter et distribuer des scripts Python
[Introduction à Python] Comment utiliser la classe en Python?
Comment définir dynamiquement des variables en Python
Comment installer et utiliser pandas_datareader [Python]
Comment faire R chartr () en Python
[Itertools.permutations] Comment créer une séquence en Python
Comment utiliser BigQuery en Python
Comment obtenir stacktrace en python
Comment afficher la table quatre-vingt-dix-neuf en python
Comment gérer des valeurs consécutives dans MySQL
Comment changer de version de Python dans cloud9
Comment régler le contraste de l'image en Python
Comment utiliser __slots__ dans la classe Python
Comment remplir dynamiquement des zéros avec Python
[Python] Comment calculer MAE et RMSE
Comment utiliser les expressions régulières en Python
Comment afficher Hello World en python
Cours des actions et statistiques (moyenne, écart type)
2. Écart moyen et standard avec le réseau neuronal!
Comment écrire Ruby to_s en Python
[Python] Précautions lors de la recherche des valeurs maximum et minimum avec un tableau numpy avec un petit nombre d'éléments