[英]python numpy optimization n-dimensional projection
我对python相对较新,并且对任何优化和加速此功能的想法感兴趣。 对于我正在进行的数值计算,我必须将其称为数十万次,并且它占用了代码总体计算时间的很大一部分。 我已经用c写了这个,但是我有兴趣看到任何技巧让它在python中运行得更快。
该代码根据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
这应该更快:
def nsphere(a, littleD=3):
a = a / np.sqrt(np.dot(a, a))
z = a[littleD:].sum()
return a[:littleD] / (1. - z)
请进行数学运算以仔细检查这实际上与您的迭代算法相同。
显然,这里的主要加速来自于这是一个O(n)算法,它取代了你的O(n ** 2)算法来计算投影。 但是特别是为了在python中加快速度,你想要“向内化循环”。 意思是尝试并避免循环以及在代码的大多数性能关键部分中具有高python开销的任何其他东西,而是尝试使用高度优化的python和numpy内置函数。 希望有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.