我有这个代码:
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]
我想通过丢弃缓慢的 native 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
一维 numpy 数组 (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]]
也许可以对两个循环进行矢量化,但我认为这会很棘手。
我没有对此进行测试,但我相信它计算的结果与您的代码相同。
关于python - 如何将这段代码从 python 循环重写为 numpy 向量(为了性能)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13714790/