У меня проблемы с пониманием, 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()возвращает массив идентификаторов строк и массив идентификаторов строк:
>>> 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, поэтому последний является пустым массивом.
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]