python numpy优化ndimensional projection

2024-10-01 13:25:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python比较陌生,对优化和加速这个函数的任何想法都很感兴趣。对于我正在做的一个数值计算,我不得不调用它数十万次,而它占用了代码总计算时间的一大部分。 我已经用c编写了这篇文章,但是我有兴趣看到在python中运行更快的技巧。在

这个代码计算一个大长度向量到一个略长向量的赤平投影,每http://en.wikipedia.org/wiki/Stereographic_projection。变量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

Tags: 函数代码numpynp时间向量temp数值
1条回答
网友
1楼 · 发布于 2024-10-01 13:25:39

这应该更快:

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内置函数,它们都经过了高度优化。希望有帮助。在

相关问题 更多 >