Python中简洁的向量相加方法?

50 投票
13 回答
124464 浏览
提问于 2025-04-15 11:29

我经常需要对Python列表进行向量加法。

举个例子:我有两个这样的列表:

a = [0.0, 1.0, 2.0]
b = [3.0, 4.0, 5.0]

现在我想把b加到a上,得到的结果是 a = [3.0, 5.0, 7.0]

通常我都是这样做的:

a[0] += b[0]
a[1] += b[1]
a[2] += b[2]

有没有什么更简单、更标准的方法可以减少输入的内容呢?

更新:可以假设这些列表的长度是3,并且里面的数都是浮点数。

13 个回答

35

虽然使用Numeric库很不错,列表推导式的解决方案也还可以,如果你真的想创建一个新列表的话,但我很惊讶没有人提到“最明显的做法”——就是用一个简单的 for 循环!最好的方法是:

for i, bi in enumerate(b): a[i] += bi

另外,这种方法也可以,勉强算是可行:

for i in xrange(len(a)): a[i] += b[i]
52

如果你需要高效的向量运算,可以试试Numpy这个库。

>>> import numpy
>>> a=numpy.array([0,1,2])
>>> b=numpy.array([3,4,5])
>>> a+b
array([3, 5, 7])
>>> 

或者(感谢Andrew Jaffe),

>>> a += b
>>> a
array([3, 5, 7])
>>> 
50

我觉得你找不到比问题中提到的三种方法更快的解决方案。使用numpy的好处在于处理更大的数据时会更明显,如果你需要其他操作的话,numpy也很有用。特别是处理矩阵时,numpy会比用Python的列表简单得多。

不过,还有另一种方法可以做到这一点 :D

In [1]: a = [1,2,3]

In [2]: b = [2,3,4]

In [3]: map(sum, zip(a,b))
Out[3]: [3, 5, 7]

补充: 你还可以使用itertools中的izip,它是zip的生成器版本。

In [5]: from itertools import izip

In [6]: map(sum, izip(a,b))
Out[6]: [3, 5, 7]

撰写回答