Numpy过滤两个蒙版的2D阵列

时间:2015-03-27 09:17:01

标签: python numpy scipy

我有一个2D数组和两个掩码,一个用于列,一个用于行。如果我尝试简单地执行data[row_mask,col_mask],则会收到错误shape mismatch: indexing arrays could not be broadcast together with shapes ...。另一方面,data[row_mask][:,col_mask]有效,但不是很漂亮。为什么期望索引数组具有相同的形状?

这是一个具体的例子:

import numpy as np
data = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
row_mask = np.array([True, True, False, True])
col_mask = np.array([True, True, False])
print(data[row_mask][:,col_mask]) # works
print(data[row_mask,col_mask]) # error

1 个答案:

答案 0 :(得分:3)

使用ix_功能:

>>> data[np.ix_(row_mask,col_mask)]
array([[ 1,  2],
       [ 4,  5],
       [10, 11]])
  

使用obj.nonzero()类比可以最好地理解将多个布尔索引数组或布尔与整数索引数组合在一起。函数ix_也支持布尔数组,并且可以毫无意外地工作。