2017-06-21 92 views
1

我有一個numpy數組。如何在二維numpy數組上執行按行OR操作?

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

我要對其執行rowise OR操作,從而導致數組是這樣的:

[1, 0, 1]

是否有這樣做沒有實現循環一個直接的方式? 如果有人可以提出建議,我將非常感激。由於

+0

'b = a [0,:] | a [1,:] | a [2 ,:]其中a是numpy數組。這工作得很好。我正在尋找更精確和緊湊的東西。 –

回答

2

如果您希望堅持按位或者(Python中的| operator是按位或,而or operator是布爾或),​​則可以使用np.bitwise_or()。但是,這隻需要兩個數組作爲輸入,因此您可以使用Numpy的reduce()功能來組合陣列中的所有子陣列。

>>> a = np.array([[1, 0, 1],[1, 0, 0],[0, 0, 1]]) 
>>> np.bitwise_or.reduce(a, 0) 
array([1, 0, 1]) 

我怎麼樣明確的,這是,但a.any()的解決方案是很常見不提出任何眉毛。 reduce的第一個參數當然是array,第二個參數是axis。所以,如果你願意的話,你也可以按照列的方式做,或者任何其他的軸。

>>> a = np.array([[1, 0, 1],[1, 0, 0],[0, 0, 1]]) 
>>> np.bitwise_or.reduce(a, 1) 
array([1, 1, 1]) 
+0

嘿謝謝,@亞歷山大雷諾茲,這正是我正在尋找的 –

+2

在30秒內打敗我回答這個問題。儘管我會使用'np.bitwise_or.reduce(a,0)'來更加明確。 –

+0

@DanielF我同意,我將補充說。謝謝! –

3

你可以通過調用any產生boolean值面具,然後轉換爲intTrueFalse10分別將做到這一點:

In[193]: 
a.any(0).astype(int) 

Out[193]: array([1, 0, 1]) 

的第一個參數來any是軸ARG ,在這裏我們可以看到軸0和1之間的差異:

In[194]: 
a.any(0) 

Out[194]: array([ True, False, True], dtype=bool) 

In[195]: 
a.any(1) 

Out[195]: array([ True, True, True], dtype=bool)