gpt4 book ai didi

python - python 中是否有适用于数组的二元或运算符?

转载 作者:太空狗 更新时间:2023-10-30 01:41:31 25 4
gpt4 key购买 nike

我是从 matlab 背景转到 python 的,我只是想知道 python 中是否有一个简单的运算符可以执行以下功能:

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]

或者我是否必须编写一个单独的函数来执行此操作?

最佳答案

您可以使用列表理解。使用 itertools 中的 izip如果您使用的是 Python 2。

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

或者,@georg在评论中指出您可以导入按位或 运算符并将其与map 一起使用。这只比列表理解快一点。 map 在 Python 2 中不需要用 list() 包装。

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

性能

列表理解:

$ 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(其中 ab 已经转换为 numpy 数组):

$ 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

结论:除非您需要 NumPy 进行其他操作,否则不值得转换。

关于python - python 中是否有适用于数组的二元或运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29251618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com