加速Python/Numpy cod

2024-09-28 22:24:49 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的代码计算整个图片的局部对比度。我的版本真的很慢。我从“multiprocessing”模块尝试使用“pool”进行多线程处理,但只提高了10%。
你能帮我加快速度吗?你知道吗

#pic: gray value picture (large 2d-array)
#xvar,yvar: scalar values, e.g. 200

contrast=[np.std(pic[stepx-xvar:xvar+stepx:,stepy-yvar:yvar+stepy:])*2 \
          for ystep in np.arange(yvar,np.int(pic.shape[1]-yvar),1)] \
          for stepx in np.arange(xvar,np.int(pic.shape[0]-xvar),1)]

Tags: 代码in版本fornp图片局部int
1条回答
网友
1楼 · 发布于 2024-09-28 22:24:49

最直接的方法是:

from skimage.util import view_as_windows

windows = view_as_windows(pic, (xvar, yvar))
contrast = 2 * np.std(windows, axis=(2,3))

这会将图片放大到一个包含所有窗口的数组,但不会产生额外的内存开销。这样做的好处是省去了Python循环/函数调用的开销。它基于Numpy的“跨步技巧”,请参见实现here(或者scikit-learn variant)。你知道吗

有一种方法的伸缩性更好,请看这里的答案:improving code efficiency: standard deviation on sliding windows

相关问题 更多 >