NumPy a la fonction / méthode efficace nonzero()
pour identifier les indices d'éléments non nuls dans un ndarray
objet. Quelle est la manière la plus efficace d'obtenir les indices des éléments qui faire une valeur de zéro?
144
numpy.where () est mon préféré.
>>> x = numpy.array([1,0,2,0,3,0,4,5,6,7,8])
>>> numpy.where(x == 0)[0]
array([1, 3, 5])
where()
renvoie un tuple?numpy.where(x == 0)[1]
est hors limites. à quoi le tableau d'index est-il alors couplé?np.zeros((3,))
pour créer un vecteur de 3 longueurs par exemple. Je soupçonne que c'est pour faciliter l'analyse des paramètres. Sinon, quelque chose commenp.zeros(3,0,dtype='int16')
versusnp.zeros(3,3,3,dtype='int16')
serait ennuyeux à mettre en œuvre.where
renvoie un tuple dendarray
s, chacun d'eux correspondant à une dimension de l'entrée. dans ce cas, l'entrée est un tableau, donc la sortie est un1-tuple
. Si x était une matrice, ce serait un2-tuple
, et ainsi de suitenumpy.where
recommande spécifiquement d'utilisernumpy.nonzero
directement plutôt que d'appelerwhere
avec un seul argument.Il y a
np.argwhere
,qui renvoie tous les indices trouvés sous forme de lignes:
la source
Vous pouvez rechercher n'importe quelle condition scalaire avec:
Ce qui rendra le tableau comme un masque booléen de la condition.
la source
a[a==0] = epsilon
Vous pouvez également l'utiliser
nonzero()
en l'utilisant sur un masque booléen de la condition, carFalse
c'est aussi une sorte de zéro.Il fait exactement la même chose que
mtrw
la manière de, mais c'est plus lié à la question;)la source
nonzero
méthode pour vérifier les conditions.Vous pouvez utiliser numpy.nonzero pour trouver zéro.
la source
Si vous travaillez avec un tableau unidimensionnel, il existe un sucre syntaxique:
la source
numpy.flatnonzero(numpy.logical_or(numpy.logical_or(x==0, x==2), x==7))
la source
Je le ferais de la manière suivante:
la source