У меня проблемы с пониманием, 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])
Обратите внимание, что когда 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]