У меня проблемы с пониманием, 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])
Обратите внимание, что когда 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 / Falsecondition
предоставляется только эта функция, является сокращением дляnp.asarray(condition).nonzero()
.Здесь немного веселее. Я обнаружил, что очень часто NumPy делает именно то, что мне хотелось бы, иногда мне быстрее просто пробовать что-то, чем читать документы. На самом деле смесь обоих является лучшим.
Я думаю, что ваш ответ в порядке (и можно принять его, если хотите). Это просто «лишнее».
дает:
... но:
дает:
источник