Indexação NumPy: transmitindo com matrizes booleanas
Relacionado aessa questão, Me deparei com um comportamento de indexação por meio de matrizes booleanas e de transmissão que eu não entendo. Sabemos que é possível indexar um array NumPy em 2 dimensões usando índices inteiros e difusão. Isso é especificado nodocs:
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]])
No entanto, o mesmo não funciona para matrizes booleanas.
a[b1[:, None], b2]
IndexError: too many indices for array
A alternativanumpy.ix_
funciona para ambos inteirose Matrizes booleanas. Isso parece ser porqueix_
realiza manipulação específica para matrizes booleanas para garantir tratamento consistente.
assert np.array_equal(a[np.ix_(b1, b2)], a[np.ix_(c1, c2)])
array([[ 4, 6],
[ 8, 10]])
Então, minha pergunta é: por que a transmissão funciona com números inteiros, mas não com matrizes booleanas? Esse comportamento está documentado? Ou estou entendendo mal uma questão mais fundamental?