Tom*_*Tom 11 python arrays indexing numpy slice
two_d = np.array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
first = np.array((True, True, False, False, False))
second = np.array((False, False, False, True, True))
Run Code Online (Sandbox Code Playgroud)
现在,当我进入:
two_d[first, second]
Run Code Online (Sandbox Code Playgroud)
我明白了:
array([3,9])
Run Code Online (Sandbox Code Playgroud)
这对我来说并没有多大意义.有人可以解释一下吗?
当给定多个布尔数组来索引时,NumPy将True值的索引配对.在第一个真正的价值first在与第一个真正的价值配对second,等等.然后NumPy在每个(x,y)索引处获取元素.
这意味着two_d[first, second]相当于:
two_d[[0, 1], [3, 4]]
Run Code Online (Sandbox Code Playgroud)
换句话说,您正在检索索引(0,3)和索引(1,4)的值; 3和9.请注意,如果两个数组具有不同数量的真值,则会引发错误!
有关高级索引的文档简要提及了此行为,并建议将其np.ix_作为"不太令人惊讶"的替代方案:
通过
obj.nonzero()类比可以最好地理解组合多个布尔索引数组或布尔与整数索引数组.该函数ix_还支持布尔数组,并且可以毫无意外地工作.
因此,您可能正在寻找:
>>> two_d[np.ix_(first, second)]
array([[3, 4],
[8, 9]])
Run Code Online (Sandbox Code Playgroud)