我有这个密码:
for j in xrange (j_start, self.max_j):
for i in xrange (0, self.max_i):
new_i = round (i + ((j - j_start) * discriminant))
if new_i >= self.max_i:
continue
self.grid[new_i, j] = standard[i]
我想通过丢弃慢的本地python循环来加快速度。有可能使用numpy向量运算代替,它们非常快怎么做?
j_start, self.max_j, self.max_i, discriminant
int,int,int,float(常量)。
self.grid
二维numpy阵列(self.max_i x self.max_j)。
standard
一维核阵列(self.max_i)。
最佳答案
这里有一个完整的解决方案,也许会有帮助。
jrange = np.arange(self.max_j - j_start)
joffset = np.round(jrange * discriminant).astype(int)
i = np.arange(self.max_i)
for j in jrange:
new_i = i + joffset[j]
in_range = new_i < self.max_i
self.grid[new_i[in_range], j+j_start] = standard[i[in_range]]
可能两个循环都可以矢量化,但我认为这会很棘手。
我还没有测试过,但我相信它计算的结果和你的代码是一样的。