【发布时间】:2020-06-24 00:54:05
【问题描述】:
我很难优化以下计算;
Inner_diff_grp = np.var(list(map(lambda x : np.percentile(winw2_grp,x[0]) - np.percentile(winw2_grp,x[1]) ,[(i+7,i) for i in range(0,98,7)])))
'winw2_grp' 是一个小型图像数组(比如 5x5)。我在图像中循环查找每 7 步的百分位值,然后计算这些值的方差。
循环中的总图像约为 100,000。之前我使用的是标准循环,但现在我已将其更改为 Pandas.apply,它似乎表现更好,吞吐量现在约为 150 次迭代/秒 - 这仍然意味着超过 10 分钟的运行时间。
除了尝试使用池来利用所有 CPU 之外,有没有办法优化这个计算?
【问题讨论】:
-
我知道 pandas 是基于 numpy 的,但是你在纯 numpy 上尝试过同样的事情吗?也许 numba 也可以提供帮助。
-
感谢 Ehsan,它实际上解决了这个问题。我从移植到 numba 的一小块开始,它跃升至 350 iter/sec 左右。但是,一旦我将所有内容都移植到 numba func,它现在的速度约为 4000 iter/sec。 Numba 是一颗宝石。非常感谢!
-
很高兴它有帮助。如果您可以在此处分享您的代码作为解决方案,那就太好了,以防其他人面临问题。谢谢。
标签: python pandas numpy optimization