我有这个密码:

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]]

可能两个循环都可以矢量化,但我认为这会很棘手。
我还没有测试过,但我相信它计算的结果和你的代码是一样的。

10-07 12:16