我有以下代码:
array1 = np.array([1,0,1,0])
array2 = np.array([1,1,0,0])
array3 = array1 | array2
array3将是:
[1 1 1 0]
此代码可以正常工作,但我想将其扩展到更多数组而无需写出array1 | array2 | array3 | etc
。
有人知道这样做的有效方法吗?可能使用.any()吗?
答案 0 :(得分:4)
您可以将reduce
与operator.or_
一起使用:
import operator
from functools import reduce
reduce(operator.or_, [array1, array2])
# array([1, 1, 1, 0])
请注意,在Python 3中,reduce
was moved是functools
库的一部分,但是在Python 2中,它是内置的。
答案 1 :(得分:4)
在这里我会坚持使用NumPy,但是有几种方法可以做到这一点。这里正在使用logical_or.reduce
。
np.logical_or.reduce([array1, array2])
# array([ True, True, True, False])
另一个变种是使用column_stack
和any
:
np.column_stack([array1, array2]).any(axis=1)
# array([ True, True, True, False])
答案 2 :(得分:3)
由于为pandas
标记了any
的一种使用|
的方式,如果需要&
,请尝试使用all
pd.DataFrame([array1,array2]).any(1).values
答案 3 :(得分:1)
您还可以对两个数组求和。如果两个元素中的任何一个为1,则总和为1。如果两个元素均为1,则总和为2。在这种情况下,您可以使用np.where
作为
array3 = np.where(array1+array2==2, 1, array1+array2)
# array([1, 1, 1, 0])