Numpy的logical_or
函數不超過兩個數組進行比較。我怎樣才能找到兩個以上數組的聯合? (同樣的問題可能對於numpy的的logical_and
並獲得兩個以上的陣列的交叉點被要求。)Numpy`logical_or`多於兩個參數
回答
作爲布爾代數都是可交換和可結合根據定義,下面的語句或等效物的一個布爾值,b和c。
a or b or c
(a or b) or c
a or (b or c)
(b or a) or c
所以,如果你有一個 「邏輯或」,這是二進,你需要將它傳遞三個參數(A,B和C ),你可以撥打
logical_or(logical_or(a, b), c)
logical_or(a, logical_or(b, c))
logical_or(c, logical_or(b, a))
或置換任何你喜歡的。
回蟒蛇,如果你想測試一個條件(由函數test
,需要一個被測定者和返回一個布爾值產生)是否適用於A或B或C或列表L的任何元素,通常使用
any(test(x) for x in L)
但是Python或者並不是真正的布爾型或者是因爲它適用於除bool之外的其他值(如果'a'是真的,則返回'a',否則''b'')電路(意思是'a或b'可以是真,而'b或a'則產生一個例外)。 – abarnert
@abarnert謝謝,我編輯了我的答案來解釋這一點。 – Hyperboreus
(我不確定爲什麼人們低估了這個,但是...... OP似乎是專門討論布爾值,他稱之爲「邏輯條件」。) – abarnert
如果你問numpy.logical_or
,則沒有,因爲文檔明確地說,唯一的參數是x1, x2
,以及可選out
:
numpy.
logical_or
(x1, x2[, out]
)=<ufunc 'logical_or'>
您當然鏈在一起的多個logical_or
呼叫這樣的:
>>> x = np.array([True, True, False, False])
>>> y = np.array([True, False, True, False])
>>> z = np.array([False, False, False, False])
>>> np.logical_or(np.logical_or(x, y), z)
array([ True, True, True, False], dtype=bool)
方式噸Ø推廣這種在NumPy的鏈接的是reduce
:
>>> np.logical_or.reduce((x, y, z))
array([ True, True, True, False], dtype=bool)
,當然如果你有一個多維數組,而不是獨立的,這也將工作陣列 - 實際上,這就是它的意味着是使用:
>>> xyz = np.array((x, y, z))
>>> xyz
array([[ True, True, False, False],
[ True, False, True, False],
[False, False, False, False]], dtype=bool)
>>> np.logical_or.reduce(xyz)
array([ True, True, True, False], dtype=bool)
但是三個相等長度的一維數組的元組是array_like在NumPy的術語,並且可被用作一個二維數組。
外NumPy的,你也可以使用Python reduce
:
>>> functools.reduce(np.logical_or, (x, y, z))
array([ True, True, True, False], dtype=bool)
然而,不同於與NumPy的reduce
,是不是經常需要Python的。對於大多數情況,有一種更簡單的方式來做事情 - 例如,將多個Python or
運算符鏈接在一起,而不是reduce
,而不是operator.or_
,只需使用any
即可。當不是時,使用顯式循環通常更具可讀性。
事實上NumPy的any
也可以用於這種情況,雖然它不是很平常;如果你沒有明確地給它一個軸,你最終會得到一個標量而不是一個數組。所以:
>>> np.any((x, y, z), axis=0)
array([ True, True, True, False], dtype=bool)
如你所料,logical_and
類似,您可以鏈接它,它np.reduce
,functools.reduce
它,或者以顯式axis
替代all
。
其他操作如logical_xor
?再一次,同樣的交易......除了在這種情況下,沒有適用的all
/any
-類型的函數。 (你會怎麼稱呼它odd
?)
大廈abarnert的回答爲n維案例:
TL; DR:np.logical_or.reduce(np.array(list))
如果有人仍然需要這一點 - 假設你有三個布爾數組a
,b
,c
具有相同形狀,這給and
逐元素:
a * b * c
這給出or
:
a + b + c
這是你想要的嗎? 堆積很多logical_and
或logical_or
是不實際的。使用總和函數
良好的解決方法,但numpy.mupltiply僅適用於2個數組 – Alex
:
a = np.array([True, False, True])
b = array([ False, False, True])
c = np.vstack([a,b,b])
Out[172]:
array([[ True, False, True],
[False, False, True],
[False, False, True]], dtype=bool)
np.sum(c,axis=0)>0
Out[173]: array([ True, False, True], dtype=bool)
- 1. Numpy:將函數應用於兩個numpy數組並返回兩個numpy數組
- 2. 測試的多個參數與numpy的
- 3. numpy元素明智數組最大值函數(多於兩個數組)
- 4. 合併兩個numpy數組
- 5. 確定參數,其中兩個numpy的數組在Python
- 6. 排序多個numpy數組
- 7. 使用兩個或多個參數時PowerShell參數集錯誤
- 8. 鑑於對一個或多個參數
- 9. 如何將兩個1d numpy數組拉到2d numpy數組中
- 10. 基於兩個不同數組返回值的Numpy方法
- 11. 兩個等於numpy數組的產品是不同的
- 12. 連接兩個在numpy的多維數組
- 13. 有效地交叉兩個NumPy數組
- 14. 在numpy下合併兩個數組
- 15. 相交兩個numpy索引數組
- 16. 比較兩個numpy數組彼此
- 17. 在numpy中結合兩個數組,
- 18. 有兩個參數
- 19. 有兩個參數
- 20. 有兩個參數
- 21. 有兩個參數
- 22. 有兩個參數
- 23. 有兩個參數
- 24. lapply兩個參數
- 25. 基於多個參數過濾XML - Flex
- 26. 基於多個參數的好網址
- 27. GroupBy基於參數的多個屬性
- 28. Python:多個條件取決於參數
- 29. 如何基於多個參數搜索
- 30. 適用於多個參數,超載
['任何()'](http://docs.python.org/2/library/functions.html#any)? – karthikr
你可能指的是['numpy.logical_or'](http://docs.scipy.org/doc/numpy/reference/generated/numpy.logical_or.html)? –
是的,這就是我正在使用的函數 – user3074893