二維向量的點積
u=[u1,u2,...un]
和v=[v1,v2,...,vn]
是由u1*v1 + u2*v2 + ... + un*vn
乙個問題
posted yesterday
鼓勵我找到最快的方法來計算python中的點產品,只使用標準庫,沒有第三方模組或c/fortran/c++呼叫。
我選了四種不同的方法;到目前為止最快的似乎是
sum(starmap(mul,izip(v1,v2)))
(何處)
starmap
和izip
來自於itertools
模組)。
對於下面顯示的**,這些是經過的時間(以秒計,對於一百萬次執行):
d0: 12.01215
d1: 11.76151
d2: 12.54092
d3: 09.58523
你能想出乙個更快的方法嗎?
import timeit # module with timing subroutines
import random # module to generate random numnbers
from itertools import imap,starmap,izip
from operator import mul
def v(n=50,min=-10,max=10):
"""generates a random vector (in an array) of dimension n; the
values are integers in the range [min,max]."""
out =
for k in range(n):
return out
def check(v1,v2):
if len(v1)!=len(v2):
raise valueerror,"the lenght of both arrays must be the same"
pass
def d0(v1,v2):
multiply/add in a loop
check(v1,v2)
out = 0
for k in range(len(v1)):
out += v1[k] * v2[k]
return out
def d1(v1,v2):
d1 uses an imap (from itertools)
check(v1,v2)
return sum(imap(mul,v1,v2))
def d2(v1,v2):
d2 uses a conventional map
check(v1,v2)
return sum(map(mul,v1,v2))
def d3(v1,v2):
check(v1,v2)
return sum(starmap(mul,izip(v1,v2)))
# generate the test vectors
v1 = v()
v2 = v()
if __name__ == '__main__':
# generate two test vectors of dimension n
t0 = timeit.timer("d0(v1,v2)","from dot_product import d0,v1,v2")
t1 = timeit.timer("d1(v1,v2)","from dot_product import d1,v1,v2")
t2 = timeit.timer("d2(v1,v2)","from dot_product import d2,v1,v2")
t3 = timeit.timer("d3(v1,v2)","from dot_product import d3,v1,v2")
print "d0 elapsed: ", t0.timeit()
print "d1 elapsed: ", t1.timeit()
print "d2 elapsed: ", t2.timeit()
print "d3 elapsed: ", t3.timeit()
請注意,檔名必須是
dot_product.py
為了執行指令碼,我在mac os x 10.5.8版上使用了python 2.5.1。
我將指令碼執行了n=1000,結果如下(以秒計,執行100萬次):
d0: 205.35457
d1: 208.13006
d2: 230.07463
d3: 155.29670
我想可以假設,實際上,選項3是最快的,而選項2是最慢的(在四個選項中)。
python python中的遍歷
遍歷list集合 infp 1,2,3,3,3 for m in infp print m 值得注意的是,m在此處的值是infp中的想對應的值,當我們通過del infp m 或者 infp.remove m 如下 infp 1,2,3,3,3 for m in infp if m is 3 pri...
python python中的urllib模組
import urllib.request response urllib.request.urlopen html response.read decode utf 8 print html 指定請求頭的方式 import urllib.request url headers request ur...
Python Python中的程序
python提供了多個模組用於建立程序。比如os.fork 適用於linux unix mac 和multiprocessing模組和pool程序池。multiprocessing模組提供了乙個process類來代表乙個程序物件,語法如下 使用的為可選引數 引數說明 group 引數未使用,值始終未...