2013-04-18 61 views
2

我有一個很大的矩陣,我想檢查它是否有一列全是零的地方。如何在numpy中做到這一點?如何檢查矩陣是否包含零列?

+0

如果是零的列,你需要列索引,或者你只需​​要「是或否」? –

+0

@WarrenWeckesser是或否 – siamii

+0

一個壞的方法::嘗試反轉它:-P(如果它有一列全爲零,它是單數) – mgilson

回答

3

創建一個equals 0掩碼(mat == 0),並在其上沿着​​軸運行all

(mat == 0).all(axis=0).any() 
+0

Warren Weckesser的解決方案可能會更快,因爲'any()'很可能會在非常早的時候停止檢查非零行,而'mat == 0'會對數組中的每個單元執行比較,而這比較慢。 – EOL

+1

@EOL是的,我同意。 'mat == 0'創建一個臨時布爾數組,其形狀與'mat'相同,而Warren的'mat.any(axis = 0)'只創建一個大小爲mat.shape [1]'的臨時1d數組,這是我解決方案速度較慢的另一個原因(但對某些人來說可能更具可讀性)。 – shx2

+1

這種方法的優點是它更容易推廣到更復雜的條件。 – DSM

10

這裏有一種方法:

In [19]: a 
Out[19]: 
array([[9, 4, 0, 0, 7, 2, 0, 4, 0, 1, 2], 
     [0, 2, 0, 0, 0, 7, 6, 0, 6, 2, 0], 
     [6, 8, 0, 4, 0, 6, 2, 0, 8, 0, 3], 
     [5, 4, 0, 0, 0, 0, 0, 0, 0, 3, 8]]) 

In [20]: (~a.any(axis=0)).any() 
Out[20]: True 

如果以後決定,你需要列索引:

In [26]: numpy.where(~a.any(axis=0))[0] 
Out[26]: array([2]) 
+0

什麼是'哪裏'?好的,這是指numpy.where – siamii

+0

是的,那是'numpy.where';代碼固定爲明確的。 –