Ответ 1
При задании нескольких булевых массивов для индексирования NumPy связывает индексы значений True. Первое истинное значение в first
в паре с первым истинным значением в second
и т.д. Затем NumPy извлекает элементы в каждом из этих индексов (x, y).
Это означает, что two_d[first, second]
эквивалентно:
two_d[[0, 1], [3, 4]]
Другими словами, вы извлекаете значения по индексу (0, 3) и индексу (1, 4); 3
и 9
. Обратите внимание, что если два массива имеют разные значения истинных значений, ошибка будет повышена!
В документах для расширенной индексации кратко укажите это поведение и предложите np.ix_
как "менее удивительную" альтернативу:
Объединение нескольких булевых индексирующих массивов или логических с целым индексирующим массивом лучше всего понять с помощью аналогии
obj.nonzero()
. Функцияix_
также поддерживает логические массивы и будет работать без каких-либо неожиданностей.
Следовательно, вы можете искать:
>>> two_d[np.ix_(first, second)]
array([[3, 4],
[8, 9]])