如何根据1-D布尔掩码选择numpy矩阵的列?

时间:2016-11-19 14:43:51

标签: python numpy

让我们考虑矩阵A

[[1, 0, 1, 0, 0, 0],
[1, 0, 0, 0, 0, 0],
[1, 0, 1, 0, 0, 0],
[1, 0, 1, 0, 0, 1],
[0, 0, 1, 0, 0, 1],
[0, 0, 1, 0, 0, 1]]

我们想要识别并删除每个元素为0的所有列。我们可以生成一个掩码,例如

mask = np.all(A == 0, axis=0)
# output: [False, True, False, True, True, False]

如何使用mask(或~mask)创建A的副本,其中只保留非空列?那是

[[1, 1, 0],
[1, 0, 0],
[1, 1, 0],
[1, 1, 1],
[0, 1, 1],
[0, 1, 1]]

1 个答案:

答案 0 :(得分:2)

>>> import numpy as np
>>> A = np.array([[1, 0, 1, 0, 0, 0],
                  [1, 0, 0, 0, 0, 0],
                  [1, 0, 1, 0, 0, 0],
                  [1, 0, 1, 0, 0, 1],
                  [0, 0, 1, 0, 0, 1],
                  [0, 0, 1, 0, 0, 1]])

>>> mask = np.all(A == 0, axis=0)
>>> mask
array([False,  True, False,  True,  True, False], dtype=bool)

>>> A[:,mask]
array([[0, 0, 0],
       [0, 0, 0],
       [0, 0, 0],
       [0, 0, 0],
       [0, 0, 0],
       [0, 0, 0]])

>>> A[:,~mask]
array([[1, 1, 0],
       [1, 0, 0],
       [1, 1, 0],
       [1, 1, 1],
       [0, 1, 1],
       [0, 1, 1]])