2

私はこのコードを持っています:

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

2次元のnumpy配列(self.max_i x self.max_j)。

standard

1次元のnumpy配列(self.max_i)。

4

1 に答える 1

2

これが完全な解決策です。おそらくそれが役立ちます。

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

両方のループをベクトル化することは可能かもしれませんが、それは難しいと思います。

私はこれをテストしていませんが、コードと同じ結果を計算すると思います。

于 2012-12-05T02:02:29.217 に答える