NumPy verfügt über die effiziente Funktion / Methode nonzero()
, um die Indizes von Nicht-Null-Elementen in einem ndarray
Objekt zu identifizieren . Was ist der effizienteste Weg , um die Indizes der Elemente zu erhalten , die nicht einen Wert von Null hat?
144
where()
ein Tupel zurück?numpy.where(x == 0)[1]
ist außerhalb der Grenzen. Womit ist das Indexarray dann gekoppelt?np.zeros((3,))
um beispielsweise einen 3-langen Vektor zu erstellen . Ich vermute, dies soll das Parsen der Parameter vereinfachen. Andernfalls wäre es ärgerlich, so etwas wienp.zeros(3,0,dtype='int16')
Versusnp.zeros(3,3,3,dtype='int16')
zu implementieren.where
Gibt ein Tupel vonndarray
s zurück, von denen jedes einer Dimension der Eingabe entspricht. In diesem Fall ist die Eingabe ein Array, daher ist die Ausgabe a1-tuple
. Wenn x eine Matrix wäre, wäre es eine2-tuple
und so weiternumpy.where
ausdrücklich empfohlen,numpy.nonzero
direkt zu verwenden, anstattwhere
nur mit einem Argument aufzurufen .Es gibt
np.argwhere
,Dies gibt alle gefundenen Indizes als Zeilen zurück:
quelle
Sie können nach jeder skalaren Bedingung suchen mit:
Dadurch wird das Array als boolesche Maske der Bedingung zurückgegeben.
quelle
a[a==0] = epsilon
Sie können es auch verwenden,
nonzero()
indem Sie es für eine boolesche Maske der Bedingung verwenden, daFalse
es sich auch um eine Art Null handelt.Es macht genau das Gleiche wie
mtrw
es ist, aber es hängt mehr mit der Frage zusammen;)quelle
nonzero
Methode zur Überprüfung der Bedingungen ist.Sie können numpy.nonzero verwenden, um Null zu finden.
quelle
Wenn Sie mit einem eindimensionalen Array arbeiten, gibt es einen syntaktischen Zucker:
quelle
numpy.flatnonzero(numpy.logical_or(numpy.logical_or(x==0, x==2), x==7))
quelle
Ich würde es folgendermaßen machen:
quelle