python - 如何将这段代码从 python 循环重写为 numpy 向量(为了性能)?

标签 python performance algorithm numpy vectorization

我有这个代码:

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/

相关文章:

python - 计算Python字典中的字典中的键

python - 管道中的函数式编程和 python pandas 数据帧

python - 通过 Python ElementTree 查找 XML 树中的所有子节点

python - 从页面中提取 URL?

c# - 性能概况显示巨大的 JIT 编译器负载

android - Handler.postDelayed(Runnable) 与 CountdownTimer

algorithm - 寻找严格递增的数字平方的边缘情况

sql - Sql中的WHERE,组合两个快速条件会使成本成倍增加

java - 为什么递归 MergeSort 比迭代 MergeSort 更快?

c# - 按基本路径过滤路径列表的最有效/优雅的方法是什么?