我相对于Python比较新,希望能得到任何优化和加速此函数的想法。我必须调用它数万到数十万次以进行数字计算,而且它占据了代码整体计算时间的主要部分。我已经用C语言编写了这个函数,但是我很想看看有没有什么诀窍可以让它在Python中运行得更快。
这段代码根据http://en.wikipedia.org/wiki/Stereographic_projection,将一个长度为bigD的向量投影到一个长度为littleD的向量上。变量a是一个长度约为96的numpy数组。
这段代码根据http://en.wikipedia.org/wiki/Stereographic_projection,将一个长度为bigD的向量投影到一个长度为littleD的向量上。变量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
i
。所以你只是不断地将temp
除以1.0-temp[-1]
很多次吗? - tpg2114temp
的大小会缩小 1,因为[0:-1]
不包括最后一项。所以这个操作并不像你所建议的那样简单。但我同意,当i
从未被引用时,显式控制i
的起始和停止值是很奇怪的。 - DaveP