產品 python python中的優化點產品

2021-10-18 18:01:11 字數 2365 閱讀 1786

二維向量的點積

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 引數未使用,值始終未...