私はPythonに比較的慣れていないので、この関数を最適化して高速化するためのアイデアに興味があります。私が行っている数値計算では、これを数万回と呼ぶ必要があり、コード全体の計算時間の大部分を占めます。私はこれをcで書いていますが、特にPythonでより高速に実行するためのトリックを知りたいと思っています。
このコードは、 http://en.wikipedia.org/wiki/Stereographic_projectionに従って、bigD-lengthベクトルからlittleD-lengthベクトルへの立体投影を計算します。変数aは、長さが約96のnumpy配列です。
import numpy as np
def nsphere(a):
bigD = len(a)
littleD = 3
temp = a
# normalize before calculating projection
temp = temp/np.sqrt(np.dot(temp,temp))
# calculate projection
for i in xrange(bigD-littleD + 2,2,-1 ):
temp = temp[0:-1]/(1.0 - temp[-1])
return temp
#USAGE:
q = np.random.rand(96)
b = nsphere(q)
print b