相关这个问题,我通过布尔数组和广播遇到了索引行为,我不明白。我们知道可以使用整数索引和广播对二维 NumPy 数组进行索引。这是在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]])
但是,这对于布尔数组则不起作用。
a[b1[:, None], b2]
IndexError: too many indices for array
另一种选择numpy.ix_适用于两个整数and布尔数组。这似乎是因为ix_
对布尔数组执行特定操作以确保一致的处理。
assert np.array_equal(a[np.ix_(b1, b2)], a[np.ix_(c1, c2)])
array([[ 4, 6],
[ 8, 10]])
所以我的问题是:为什么广播可以使用整数,但不能使用布尔数组?这种行为有记录吗?或者我误解了一个更根本的问题?