Python 泛函中的向量代数

Python 泛函中的向量代数,python,function,vector,Python,Function,Vector,如何使用python中的函数式编程实现向量和。 此代码适用于n 1000 像这样: print [sum(e) for e in izip(*twin)] 甚至在功能上: print map(sum, izip(*twin)) 请注意,压缩非常类似于转置二维数组 >>> zip([1, 2, 3, 4], ... [5, 6, 7, 8]) == [(1, 5), ... (2, 6), ...

如何使用python中的函数式编程实现向量和。
此代码适用于n 1000

像这样:

print [sum(e) for e in izip(*twin)]
甚至在功能上:

print map(sum, izip(*twin))
请注意,压缩非常类似于转置二维数组

>>> zip([1, 2, 3, 4],
...     [5, 6, 7, 8])  ==  [(1, 5),
...                         (2, 6),
...                         (3, 7),
...                         (4, 8)]
True

Python内置了sum,何必费心:

from itertools import *

n=10000
twin=((i,i**2,i**3) for i in xrange(1,n+1))
x,y,z= izip(*twin)

print sum(x),sum(y),sum(z)

你知道,
(iterable中x的f(x)
实际上并没有创建元组。Python在单个对象(生成器)周围看到圆括号,并仅返回该对象。如果你想创建一个元组,你需要使用
tuple(f(x)表示iterable中的x)
。我不想创建tuple
*twin
在把
twin
的元素传递给函数之前先解包。如果
twin
((1,1,1)、(2,4,8))
那么
izip(twin)
将是
izip(((1,1,1)、(2,4,8))
,但是
izip(*twin)
将是
izip((1,1,1)、(2,4,8))
。检查文档中“解包参数列表”下的教程。
from itertools import *

n=10000
twin=((i,i**2,i**3) for i in xrange(1,n+1))
x,y,z= izip(*twin)

print sum(x),sum(y),sum(z)