Python 通过使用另一个numpy数组作为掩码删除列来压缩numpy数组(矩阵)

Python 通过使用另一个numpy数组作为掩码删除列来压缩numpy数组(矩阵),python,numpy,Python,Numpy,我有一个2Dnumpy数组(即矩阵)a,它包含有用的数据,以列向量的形式散布在垃圾中,还有一个“selection”数组B,它包含重要列的“1”,不重要列的“0”。有没有办法只从a中选择那些与B中的列相对应的列?i、 我有一个矩阵 A = array([[ 0, 1, 2, 3, 4], and a vector B = array([ 0, 1, 0, 1, 0]) [ 5, 6, 7, 8, 9], [10, 11, 1

我有一个2D
numpy
数组(即矩阵)
a
,它包含有用的数据,以列向量的形式散布在垃圾中,还有一个“selection”数组
B
,它包含重要列的“1”,不重要列的“0”。有没有办法只从
a
中选择那些与
B
中的列相对应的列?i、 我有一个矩阵

A = array([[ 0,  1,  2,  3,  4],   and a vector B = array([ 0,  1,  0,  1,  0])
           [ 5,  6,  7,  8,  9],
           [10, 11, 12, 13, 14],
           [15, 16, 17, 18, 19],
           [20, 21, 22, 23, 24]])
我想要

array([[1,   3],
       [6,   8],
       [11, 13],
       [16, 18],
       [21, 23]])
有没有一种优雅的方式可以做到这一点?现在我有一个for循环,它迭代
B


注意:我正在处理的矩阵很大,所以我不想使用numpy掩码数组,因为我根本不想使用掩码数据

不确定这是否是最有效的方法(因为换位),但它应该比for循环更好:

A.T[B == 1].T

NumPy中基于索引的切片的语法优雅而简单。一些规则涵盖了大多数用例:

  • 表单是[行、列]

  • 使用冒号指定所有行或所有列:“例如,[:,4](提取 整个第五列)


我也有兴趣这样做,但要使用向量B的布尔值对行和列进行切片,解决方案很简单:

res = A[:,B][B,:]
res = A[:,B][B,:]