对多个NumPy数组执行逻辑或运算

时间:2019-03-20 21:47:43

标签: python pandas numpy

我有以下代码:

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()吗?

4 个答案:

答案 0 :(得分:4)

您可以将reduceoperator.or_一起使用:

import operator
from functools import reduce

reduce(operator.or_, [array1, array2])
# array([1, 1, 1, 0])

请注意,在Python 3中,reduce was movedfunctools库的一部分,但是在Python 2中,它是内置的。

答案 1 :(得分:4)

在这里我会坚持使用NumPy,但是有几种方法可以做到这一点。这里正在使用logical_or.reduce

np.logical_or.reduce([array1, array2])
# array([ True,  True,  True, False])

另一个变种是使用column_stackany

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作为

来重新分配值1
array3 = np.where(array1+array2==2, 1, array1+array2)
# array([1, 1, 1, 0])