首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何加速一个数组元素的求和?

如何加速一个数组元素的求和?
EN

Stack Overflow用户
提问于 2019-02-05 05:04:14
回答 1查看 198关注 0票数 0

我想做一个3d数组的总和,但将元素n分组到n。显式地做它需要大量的执行时间。

我尝试过使用numba,但它并没有改善。对于f2py,它可能可以工作,但在这种情况下,我更愿意跳过它。

代码语言:javascript
复制
fsum=np.zeros([N,M,L])
for i in range(0,N):
     for j in range(1,M-1):
       for k in range(0,L):
           for h in range(j-5,j+5):
               fsum[i,j,k]=fsum[i,j,k]+g[i,h,k]

我想找到一种方法来写它,这样可以提高性能。我该怎么做呢?

EN

回答 1

Stack Overflow用户

发布于 2019-02-05 16:32:21

如果您可以使用scipy,那么可以使用n-d卷积:

代码语言:javascript
复制
import numpy as np
from scipy.ndimage.filters import convolve

这是你的输入

代码语言:javascript
复制
g = np.ones((100,100,5) 

在这里你可以定义卷积的“窗口”

代码语言:javascript
复制
ker = np.ones((1,11,1)) # = [[[1] [1] [1] [1] [1] [1] [1] [1] [1] [1] [1]]]

然后使用处理边界的模式计算卷积

代码语言:javascript
复制
# constant means that a 0-padding will be added to border to compute the convolution
fmat = convolve(g, ker, mode='constant') 

显示结果

代码语言:javascript
复制
print(fmat)

请参阅Here获取更多详细信息。

编辑:

对于第二个维度,您需要将元素五乘五求和。因此,您需要计算每个像素周围的1x11x1窗口的总和(这是您的for循环,范围从j-5到j+5)。这可以使用卷积(例如,将滤波器应用于图像是卷积)。

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

https://stackoverflow.com/questions/54524301

复制
相关文章

相似问题

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