it-swarm.com.de

numpy.where () ausführliche, schrittweise Erklärung / Beispiele

Ich habe Probleme, numpy.where() richtig zu verstehen, obwohl ich das Dokument , diesen Beitrag und diesen anderen Beitrag gelesen habe.

Kann jemand schrittweise kommentierte Beispiele für 1D- und 2D-Arrays bereitstellen?

148

Nachdem ich eine Weile herumgespielt hatte, fand ich die Dinge heraus und poste sie hier in der Hoffnung, dass sie anderen helfen.

Intuitiv ist np.where wie die Frage "sag mir, wo in diesem Array Einträge eine gegebene 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 ein 2d-Array ist, gibt np.where() ein Array von Zeilen-IDXs und ein Array von Spalten-IDXs zurück:

>>> a = np.arange(4,10).reshape(2,3)
array([[4, 5, 6],
       [7, 8, 9]])
>>> np.where(a > 8)
(array(1), array(2))

Damit können wir, wie im Fall 1d, np.where() verwenden, um Einträge im 2d-Array abzurufen, die die Bedingung erfüllen:

>>> a[np.where(a > 8)] # selects from a entries 0, 1, 2

array ([9])


Beachten Sie, dass, wenn a 1d ist, np.where() immer noch ein Array von Zeilen-IDXs und ein Array von Spalten-IDXs zurückgibt, die Spalten jedoch die Länge 1 haben. Letzteres ist also ein leeres Array.

242

Hier ist 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 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]
17
uhoh