numpy.where () детальне, покрокове пояснення / приклади [закрито]


168

У мене є проблеми з правильним розумінням, numpy.where()незважаючи на читання документа , цієї публікації та цього іншого допису .

Чи може хтось надати покрокові коментовані приклади з 1D та 2D масивами?

Відповіді:


271

Провівши деякий час, я зрозумів речі, і розміщую їх тут, сподіваючись, що це допоможе іншим.

Інтуїтивно зрозуміло, np.whereяк просити " скажи мені, де в цьому масиві записи відповідають заданій умові ".

>>> 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

Його також можна використовувати для отримання записів у масиві, які задовольняють умові:

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

Коли aце 2d масив, np.where()повертає масив рядків idx та масив col idx:

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

Як і у випадку 1d, ми можемо використовувати np.where()для отримання записів у масиві 2d, які відповідають умові:

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

масив ([9])


Зауважте, що коли a1d, np.where()усе ще повертає масив рядків idx та масив col idx, але стовпці мають довжину 1, тому останній є порожнім масивом.


10
Я намагався зрозуміти np.where при використанні 2d, поки я не знайшов вашу відповідь "Коли a - це 2d масив, np.where () повертає масив idx рядка та масив col idx's:". Дякую за це.
bencampbell_14

1
Я відчував себе досить дурним, прочитавши документ тричі, і все ще не вирішував головоломки np.where(2d_array), дякую, що вияснили це! Ви повинні прийняти власну відповідь. д: О, це закрито. Ну, не повинно бути
smcs

5
Прикро, що це було закрито. Однак я хотів би додати ще одну особливість np.whereцієї повноцінної відповіді. Функція також може вибирати елементи з масиву x та y залежно від умови. Обмежений простір у цьому коментарі, але дивіться: 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]]))повернеться array([[4, 8, 6], [9, 2, 1]]). Зауважте, які елементи x та y вибираєте залежно від True / False
piccolo

Пояснення, дане у цій відповіді, є лише окремим випадком np. де. Згідно з документацією, коли лише conditionнадано, ця функція є скороченням np.asarray(condition).nonzero().
Ленні

19

Ось трохи веселіше. Я виявив, що дуже часто NumPy робить саме те, що я хотів би зробити це - іноді мені швидше просто спробувати речі, ніж читати документи. Насправді найкраще поєднання обох.

Я думаю, що ваша відповідь чудова (і це нормально, якщо ви хочете). Це просто "зайве".

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

дає:

wh:  (array([1, 1]), array([1, 2]))
gt:  [[False False False]
      [False  True  True]]
x:   (array([1, 1]), array([1, 2]))

... але:

print "a[wh]: ", a[wh]
print "a[gt]  ", a[gt]
print "a[x]:  ", a[x]

дає:

a[wh]:  [8 9]
a[gt]   [8 9]
a[x]:   [8 9]

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.