繁体   English   中英

python numpy优化n维投影

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM