【发布时间】:2012-11-25 04:21:06
【问题描述】:
我对 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
【问题讨论】:
-
我很困惑——在你的 for 循环中,你没有在任何地方使用索引
i。所以你只是多次将temp除以1.0-temp[-1]? -
@tpg2114 - 在循环的每次迭代中,
temp会缩小一个,因为[0:-1] 不包括最后一项。所以操作并不像你建议的那么简单。但我同意在从未被引用时显式控制i的开始和停止值是很奇怪的。 -
嗨 - 是的,我没有被使用,这是一种重复这个过程 96-3 次的愚蠢方式,但实际上就是这样。我想知道是否每次将 temp[] 重新分配给 1 元素较短的向量很慢,将长度为 96、95、94 的向量的 96-3 长度列表预分配给 3 会更快吗?我不知道这在 python 中是如何工作的。
标签: python optimization numpy projection