2016-01-07 16 views
37

Ich habe Probleme zu verstehen numpy.where() trotz Lesen the doc, this post und this other post.numpy.where() detaillierte, Schritt-für-Schritt-Erklärung/Beispiele

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

+3

Bitte genauer gesagt über * was * Sie nicht verstehen. Sicher wollen Sie nicht, dass wir alles aus der Dokumentation wiederholen. – timgeb

+9

Ich weiß nicht, warum Leute mit solchen Fragen beleidigt werden und sie schließen. Aber weiß das, es hat vielen Menschen geholfen. – deadcode

Antwort

79

Nachdem ich eine Zeitlang herumgespielt habe, habe ich herausgefunden, was ich mache, und stelle sie hier, in der Hoffnung, dass es anderen hilft.

Intuitiv ist np.where wie fragen "sagen Sie 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 ist auch Einträge in einem Array verwendet werden kann, erhalten, die die Bedingung erfüllen:

>>> a[np.where(a < 8)] 
array([5, 6, 7])   # selects from a entries 0, 1, 2 

Wenn ein ein 2D-Array ist, np.where() gibt einen Array von Zeilen idx sind, und eine Reihe von col idx suchen:

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

so dass, wie in 1d Fall können wir np.where() t verwenden o erhalten Einträge in dem 2D-Array, die die Bedingung erfüllen:

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

Array ([9])


Hinweis, wenn a 1d ist, kehrt np.where() immer noch eine Reihe von Zeilen idx der und einem Array von col idx aber Spalten sind von der Länge 1, so dass letztere leere Array ist.

+3

Ich hatte Probleme, np.where zu verstehen, wenn es auf 2d verwendet wurde, bis ich Ihre Antwort gefunden habe. "Wenn a ein 2d-Array ist, gibt np.where() ein Array von Zeilen-IDXs und ein Array von Col-IDXs zurück." Dank dafür. –

+0

Danke Alexandre. Ihre Kommentare halfen, ich hatte auch Probleme mit dem Verständnis. – anonnoir

+0

Ich fühlte mich ziemlich dumm, nachdem ich den Doc drei Mal gelesen hatte und immer noch nicht das Rätsel "np.where (2d_array)" löste, danke, dass du das geklärt hast! Sie sollten Ihre eigene Antwort akzeptieren. e: Oh, es ist geschlossen. Nun, es sollte nicht sein – speedymcs

1

Hier ist ein bisschen mehr Spaß. Ich habe festgestellt, dass NumPy sehr oft genau das tut, was ich mir wünsche - manchmal ist es für mich schneller, Dinge einfach zu versuchen, als die Dokumente zu lesen. Eigentlich ist eine Mischung aus beidem am besten.

Ich denke, Ihre Antwort ist in Ordnung (und es ist in Ordnung, es zu akzeptieren, wenn Sie möchten). Das 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] 
Verwandte Themen