2016-11-19 96 views
1

讓我們考慮矩陣A如何根據一維布爾掩模選擇numpy矩陣的列?

[[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]] 

回答

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]])