Ich habe Probleme beim richtigen Verstehen, numpy.where()
obwohl ich das Dokument , diesen Beitrag und diesen anderen Beitrag gelesen habe .
Kann jemand Schritt für Schritt kommentierte Beispiele mit 1D- und 2D-Arrays bereitstellen?
Ich habe Probleme beim richtigen Verstehen, numpy.where()
obwohl ich das Dokument , diesen Beitrag und diesen anderen Beitrag gelesen habe .
Kann jemand Schritt für Schritt kommentierte Beispiele mit 1D- und 2D-Arrays bereitstellen?
Antworten:
Nachdem ich eine Weile herumgespielt hatte, fand ich die Dinge heraus und poste sie hier in der Hoffnung, dass es anderen helfen wird.
Intuitiv np.where
ist das wie die Frage " Sag mir, wo in diesem Array Einträge eine bestimmte Bedingung erfüllen ".
>>> a = np.arange(5,10)
>>> np.where(a < 8) # tell me where in a, entries are < 8
(array([0, 1, 2]),) # answer: entries indexed by 0, 1, 2
Es kann auch verwendet werden, um Einträge in einem Array abzurufen, die die Bedingung erfüllen:
>>> a[np.where(a < 8)]
array([5, 6, 7]) # selects from a entries 0, 1, 2
Wenn a
es sich um ein 2D-Array handelt, wird np.where()
ein Array mit Zeilen-IDX und ein Array mit Spalten-IDX zurückgegeben:
>>> a = np.arange(4,10).reshape(2,3)
array([[4, 5, 6],
[7, 8, 9]])
>>> np.where(a > 8)
(array(1), array(2))
Wie im 1d-Fall können wir np.where()
Einträge im 2d-Array abrufen, die die Bedingung erfüllen:
>>> a[np.where(a > 8)] # selects from a entries 0, 1, 2
Array ([9])
Beachten Sie, dass bei a
1d np.where()
immer noch ein Array von Zeilen-IDX und ein Array von Spalten-IDX zurückgegeben wird, die Spalten jedoch die Länge 1 haben, sodass letzteres ein leeres Array ist.
np.where(2d_array)
, danke, dass du das geklärt hast! Sie sollten Ihre eigene Antwort akzeptieren. e: Oh, es ist geschlossen. Nun, es sollte nicht sein
np.where
dieser ansonsten vollständigen Antwort jedoch noch eine weitere Funktion hinzufügen . Die Funktion kann je nach Bedingung auch Elemente aus dem x- und y-Array auswählen. Begrenzter Platz in diesem Kommentar, aber siehe: np.where(np.array([[False,False,True], [True,False,False]]), np.array([[8,2,6], [9,5,0]]), np.array([[4,8,7], [3,2,1]]))
wird zurückkehren array([[4, 8, 6], [9, 2, 1]])
. Beachten Sie, welche Elemente von x und y abhängig von Richtig / Falsch ausgewählt werden
condition
ist diese Funktion eine Abkürzung für Wenn nur bereitgestellt wird np.asarray(condition).nonzero()
.
Hier macht ein bisschen mehr Spaß. Ich habe festgestellt, dass NumPy sehr oft genau das tut, was ich mir gewünscht habe - manchmal ist es für mich schneller, Dinge einfach auszuprobieren, als die Dokumente zu lesen. Eigentlich ist eine Mischung aus beiden am besten.
Ich denke, Ihre Antwort ist in Ordnung (und es ist in Ordnung, sie zu akzeptieren, wenn Sie möchten). Dies ist nur "extra".
import numpy as np
a = np.arange(4,10).reshape(2,3)
wh = np.where(a>7)
gt = a>7
x = np.where(gt)
print "wh: ", wh
print "gt: ", gt
print "x: ", x
gibt:
wh: (array([1, 1]), array([1, 2]))
gt: [[False False False]
[False True True]]
x: (array([1, 1]), array([1, 2]))
... aber:
print "a[wh]: ", a[wh]
print "a[gt] ", a[gt]
print "a[x]: ", a[x]
gibt:
a[wh]: [8 9]
a[gt] [8 9]
a[x]: [8 9]