>>> ex=np.arange(30)
>>> e=np.reshape(ex,[3,10])
>>> e
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
[20, 21, 22, 23, 24, 25, 26, 27, 28, 29]])
>>> e>15
array([[False, False, False, False, False, False, False, False, False,
False],
[False, False, False, False, False, False, True, True, True,
True],
[ True, True, True, True, True, True, True, True, True,
True]], dtype=bool)
Ich muss die Zeilen mit true oder Zeilen e
mit einem Wert von mehr als 15 finden. Ich könnte mit einer for-Schleife iterieren. Ich möchte jedoch wissen, ob es eine Möglichkeit gibt, wie numpy dies effizienter ausführen kann.
np.nonzero()
ist das, wasnp.where()
verwendet unter der Haube .np.transpose(np.where(board==0))
hat bei mir funktioniertEine einfache und übersichtliche Methode: Verwenden Sie
np.argwhere
diese Option, um die Indizes nach Elementen und nicht nach Dimensionen wie in zu gruppierennp.nonzero(a)
(dh, Sie gebennp.argwhere
für jedes Element ungleich Null eine Zeile zurück).>>> a = np.arange(10) >>> a array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> np.argwhere(a>4) array([[5], [6], [7], [8], [9]])
np.argwhere(a)
ist das gleiche wienp.transpose(np.nonzero(a))
.Hinweis: Sie können nicht verwenden
a(np.argwhere(a>4))
, um die entsprechenden Werte in zu erhaltena
. Die empfohlene Methode besteht darin, 0-d-Arrays korrekt zu verwendena[(a>4).astype(bool)]
odera[(a>4) != 0]
nichta[np.nonzero(a>4)]
. Weitere Informationen finden Sie in der Dokumentation . Wie im folgenden Beispiel zu sehen ista[(a>4).astype(bool)]
unda[(a>4) != 0]
vereinfacht werden kanna[a>4]
.Ein anderes Beispiel:
>>> a = np.array([5,-15,-8,-5,10]) >>> a array([ 5, -15, -8, -5, 10]) >>> a > 4 array([ True, False, False, False, True]) >>> a[a > 4] array([ 5, 10]) >>> a = np.add.outer(a,a) >>> a array([[ 10, -10, -3, 0, 15], [-10, -30, -23, -20, -5], [ -3, -23, -16, -13, 2], [ 0, -20, -13, -10, 5], [ 15, -5, 2, 5, 20]]) >>> a = np.argwhere(a>4) >>> a array([[0, 0], [0, 4], [3, 4], [4, 0], [4, 3], [4, 4]]) >>> [print(i,j) for i,j in a] 0 0 0 4 3 4 4 0 4 3 4 4
quelle