通常対psyco
とかあったんだけど、これpsyco使えばリスト内包でも早くなんじゃね?とか思って書いてみた。
といっても上の文章だとどう書きゃいいのかわからないので自分で書き直してみた。そのため行列じゃなかったりで多少意味合い違うかも。
import datetime from pylab import arange from math import sqrt import random import psyco psyco.full() dim = 100 def getdistsA(unitA, unitB): s = sum([(unitA[x] - unitB[x]) for x in arange(dim)])**2 dist = sqrt(s) return dist def main(): tt0 = datetime.datetime.now() for i in arange(1000*10): A = [random.random()*10 for x in arange(dim)] B = [random.random()*10 for y in arange(dim)] d= getdistsA(A,B) tt1 = datetime.datetime.now() t0 = tt1 - tt0 print t0,"sec" main()
これで"import psyco"と"psyco.full"を
環境はMacBookAir(10.5.8), Python2.6.4。
劇的って訳じゃないけどある程度早くなる。
ちなみに最初main()を関数にせずにベタで書いてたんだけど、それだと2.7秒かかってた。