首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加速Python/Numpy代码

加速Python/Numpy代码
EN

Stack Overflow用户
提问于 2015-09-15 22:59:39
回答 1查看 83关注 0票数 0

下面的代码计算整个图片的局部对比度。我的版本真的很慢。我尝试过使用‘multiprocessing’模块中的'pool‘进行多线程处理,但速度只提高了10%。

你能帮我把速度再加快一点吗?

代码语言:javascript
复制
#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)]
EN

回答 1

Stack Overflow用户

发布于 2015-09-16 01:38:47

最直接的方法是:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32589348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档