У мене є проблеми з правильним розумінням, numpy.where()
незважаючи на читання документа , цієї публікації та цього іншого допису .
Чи може хтось надати покрокові коментовані приклади з 1D та 2D масивами?
У мене є проблеми з правильним розумінням, numpy.where()
незважаючи на читання документа , цієї публікації та цього іншого допису .
Чи може хтось надати покрокові коментовані приклади з 1D та 2D масивами?
Відповіді:
Провівши деякий час, я зрозумів речі, і розміщую їх тут, сподіваючись, що це допоможе іншим.
Інтуїтивно зрозуміло, 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])
Зауважте, що коли a
1d, np.where()
усе ще повертає масив рядків idx та масив col idx, але стовпці мають довжину 1, тому останній є порожнім масивом.
np.where(2d_array)
, дякую, що вияснили це! Ви повинні прийняти власну відповідь. д: О, це закрито. Ну, не повинно бути
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
condition
надано, ця функція є скороченням np.asarray(condition).nonzero()
.
Ось трохи веселіше. Я виявив, що дуже часто 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]