Python 泛函中的向量代数
如何使用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), ...
此代码适用于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)