我有一个按位元素列表,例如[1,1,1],我想在列表中的每个元素之间进行按位OR运算。所以,例如。
for [1,1,1] do
1 | 1 | 1 = 1
或[1,17,1]做
1 | 17 | 1 = 17
如何在不循环的情况下执行此操作? Numpy的bitwise_or似乎只适用于2个阵列。是否有点&或者适用于每个元素,类似于sum或np.mean?谢谢。
答案 0 :(得分:19)
您可以reduce
使用operator.ior
:
>>> from operator import ior
>>> lst = [1, 17, 1]
>>> reduce(ior, lst)
17
正如@DSM在评论中所建议的那样,numpy等价物将是:
>>> import numpy as np
>>> arr = np.array(lst)
>>> np.bitwise_or.reduce(arr)
17
答案 1 :(得分:7)
适用于numpy reduce:
>>> ar = numpy.array([1,17,1])
>>> numpy.bitwise_or.reduce(ar)
17
答案 2 :(得分:0)
如其他答案中所建议,numpy
和operator.ior
都不会导入任何东西,
a = [1,17,1]
reduce(lambda x,y: x | y, a)
编辑:但是,当我对不同的选项进行基准测试时,速度更快:
a = [1,17,1]; b = 0
for x in a: b |= x
第二个选项还有一个优势,它可以在Python 3中使用,从中删除了reduce
(尽管仍然可以从functools
导入)。