La compréhension de NumPy est différente de zéro de la fonction
J'essaie de comprendre numpy est nonzero
fonction. Le suivant est un exemple d'application:
import numpy
arr = numpy.array([[1,0],[1,1]])
arr.nonzero()
--> (array([0, 1, 1]), array([0, 0, 1]))
Je peux voir que parce que arr
est 2-D, la sortie de nonzero()
est un 2-tuple. Cependant, je ne comprends pas pourquoi le nombre d'indices dans chaque élément du tuple excède le nombre de lignes/colonnes de la matrice. Je vois que
arr[arr.nonzero()]
--> array([1, 1, 1])
Mais comment...?
OriginalL'auteur hatmatrix | 2011-10-28
Vous devez vous connecter pour publier un commentaire.
Chaque élément du tuple contient l'un des indices pour chaque valeur différente de zéro. Par conséquent, la longueur de chaque élément tuple est le nombre de nonzeros dans le tableau.
À partir de votre exemple, les indices de la nonzeros sont
[0, 0]
,[1, 0]
, et[1, 1]
. Le premier élément du tuple est le premier indice pour chacune des valeurs non nulles:([0, 1, 1])
, et le deuxième élément du tuple est le deuxième indice pour chacune des valeurs non nulles:([0, 0, 1])
.Votre deuxième bloc de code ne renvoie que les valeurs non nulles de la matrice (je ne suis pas clair à partir de la question de savoir si la valeur de retour est une partie de la confusion).
C'est plus clair si nous utilisons un exemple de tableau avec d'autres valeurs.
[0, 0]
,[1, 0]
, et[1, 1]
de sens. donczip(arr.nonzero())
sont destinés à la restitution de ces jumelé indices.Ok, donc la longueur des tableaux dans le retour de l'tuple est égal au nombre de non-zéro des valeurs qui sont à l'orig tableau. Et le nombre de tableaux dans le retourné tuple est égal au nombre de dimensions dans l'orig tableau. Et si j'ai zippé le résultat de l'arr.différent de zéro(), j'aimerais obtenir un tableau des indices pour les non-zéro éléments. Je pense que c'est aussi ce que
np.transpose(np.nonzero(arr)
retourne: un tableau des indices de la valeur non-nulle dans arr. J'aime bien ton exemple dearr[arr.nonzero()]
pour obtenir un tableau de la valeur non-nulle eux-mêmes.OriginalL'auteur David Alber