Ответ 1
Поработав некоторое время, я все выяснил и выкладываю здесь, надеясь, что это поможет другим.
Интуитивно понятно, что 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
является двумерным массивом, 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, поэтому последний является пустым массивом.