我有一個numpy數組。如何在二維numpy數組上執行按行OR操作?
[[1, 0, 1],
[1, 0, 0],
[0, 0, 1]]
我要對其執行rowise OR操作,從而導致數組是這樣的:
[1, 0, 1]
是否有這樣做沒有實現循環一個直接的方式? 如果有人可以提出建議,我將非常感激。由於
我有一個numpy數組。如何在二維numpy數組上執行按行OR操作?
[[1, 0, 1],
[1, 0, 0],
[0, 0, 1]]
我要對其執行rowise OR操作,從而導致數組是這樣的:
[1, 0, 1]
是否有這樣做沒有實現循環一個直接的方式? 如果有人可以提出建議,我將非常感激。由於
如果您希望堅持按位或者(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])
嘿謝謝,@亞歷山大雷諾茲,這正是我正在尋找的 –
在30秒內打敗我回答這個問題。儘管我會使用'np.bitwise_or.reduce(a,0)'來更加明確。 –
@DanielF我同意,我將補充說。謝謝! –
你可以通過調用any
產生boolean值面具,然後轉換爲int
到True
和False
到1
和0
分別將做到這一點:
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)
'b = a [0,:] | a [1,:] | a [2 ,:]其中a是numpy數組。這工作得很好。我正在尋找更精確和緊湊的東西。 –