Python 通过使用另一个numpy数组作为掩码删除列来压缩numpy数组(矩阵)
我有一个2DPython 通过使用另一个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
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](提取 整个第五列)
res = A[:,B][B,:]
res = A[:,B][B,:]