Моя точка зрения заключается в том, что поведение булевых расширенных индексов и их статус устаревания (или его отсутствие) могут измениться в недалеком будущем.
ится кэтот вопрос, Я сталкивался с поведением индексации через логические массивы и вещание я не понимаю. Мы знаем, что можно индексировать массив NumPy в двух измерениях, используя целочисленные индексы и широковещательную рассылку. Это указано вдокументы:
a = np.array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
b1 = np.array([False, True, True])
b2 = np.array([True, False, True, False])
c1 = np.where(b1)[0] # i.e. [1, 2]
c2 = np.where(b2)[0] # i.e. [0, 2]
a[c1[:, np.newaxis], c2] # or a[c1[:, None], c2]
array([[ 4, 6],
[ 8, 10]])
Однако то же самое не работает для логических массивов.
a[b1[:, None], b2]
IndexError: too many indices for array
Альтернативаnumpy.ix_
работает как для целых чисела также Булевы массивы. Это, кажется, потому чтоix_
выполняет специальные манипуляции для логических массивов, чтобы обеспечить последовательное лечение.
assert np.array_equal(a[np.ix_(b1, b2)], a[np.ix_(c1, c2)])
array([[ 4, 6],
[ 8, 10]])
Поэтому мой вопрос: почему вещание работает с целыми числами, а не с логическими массивами? Это поведение задокументировано? Или я неправильно понимаю более фундаментальную проблему?