is there a binary OR operator in python that works on arrays?

你离开我真会死。 提交于 2021-02-09 03:57:11

问题


I have come from a matlab background to python and i am just wondering if there is a simple operator in python that will perform the following function:

a = [1, 0, 0, 1, 0, 0]
b = [0, 1, 0, 1, 0, 1]
c = a|b
print c
[1, 1, 0, 1, 0, 1]

or would i have to write a separate function to do that?


回答1:


You could use a list comprehension. Use izip from itertools if you're using Python 2.

c = [x | y for x, y in zip(a, b)]

Alternatively, @georg pointed out in a comment that you can import the bitwise or operator and use it with map. This is only slightly faster than the list comprehension. map doesn't need wrapped with list() in Python 2.

import operator
c = list(map(operator.or_, a, b))

Performance

List comprehension:

$ python -m timeit -s "a = [1, 0, 0, 1, 0, 0]; b = [0, 1, 0, 1, 0, 1]" \
> "[x | y for x, y in zip(a, b)]"

1000000 loops, best of 3: 1.41 usec per loop

Map:

$ python -m timeit -s "a = [1, 0, 0, 1, 0, 0]; b = [0, 1, 0, 1, 0, 1]; \
> from operator import or_" "list(map(or_, a, b))"
1000000 loops, best of 3: 1.31 usec per loop

NumPy

$ python -m timeit -s "import numpy; a = [1, 0, 0, 1, 0, 0]; \
> b = [0, 1, 0, 1, 0, 1]" "na = numpy.array(a); nb = numpy.array(b); na | nb"

100000 loops, best of 3: 6.07 usec per loop

NumPy (where a and b have already been converted to numpy arrays):

$ python -m timeit -s "import numpy; a = numpy.array([1, 0, 0, 1, 0, 0]); \
> b = numpy.array([0, 1, 0, 1, 0, 1])" "a | b"

1000000 loops, best of 3: 1.1 usec per loop

Conclusion: Unless you need NumPy for other operations, it's not worth the conversion.




回答2:


If your data was in numpy arrays then yes this would work:

In [42]:

a = np.array([1, 0, 0, 1, 0, 0])
b = np.array([0, 1, 0, 1, 0, 1])
c = a|b
print(c)
[1 1 0 1 0 1]
Out[42]:
[1, 1, 0, 1, 0, 1]



回答3:


map(lambda (a,b): a|b,zip(a,b))




回答4:


You can use numpy.bitwise_or

>>> import numpy
>>> a = [1, 0, 0, 1, 0, 0]
>>> b = [0, 1, 0, 1, 0, 1]
>>> numpy.bitwise_or(a,b)
array([1, 1, 0, 1, 0, 1])



回答5:


c = [q|w for q,w in zip(a,b)]
print c
# [1, 1, 0, 1, 0, 1]


来源:https://stackoverflow.com/questions/29251618/is-there-a-binary-or-operator-in-python-that-works-on-arrays

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!