ndexación @NumPy: difusión con matrices booleanas
Relacionado conesta pregunt, Me encontré con un comportamiento de indexación a través de matrices booleanas y difusión que no entiendo. Sabemos que es posible indexar una matriz NumPy en 2 dimensiones utilizando índices enteros y difusión. Esto se especifica en la docs:
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]])
Sin embargo, lo mismo no funciona para las matrices booleanas.
a[b1[:, None], b2]
IndexError: too many indices for array
La alternativanumpy.ix_
funciona para ambos enteros Matrices booleanas. Esto parece ser porqueix_
realiza una manipulación específica para matrices booleanas para garantizar un tratamiento consistente.
assert np.array_equal(a[np.ix_(b1, b2)], a[np.ix_(c1, c2)])
array([[ 4, 6],
[ 8, 10]])
Entonces mi pregunta es: ¿por qué la transmisión funciona con enteros, pero no con matrices booleanas? ¿Está documentado este comportamiento? ¿O estoy malinterpretando un problema más fundamental?