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

2024-03-29 04:47:20 发布

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

我想做一个三维数组的和,但是把元素n个n个分组。显式地做它需要大量的执行时间。你知道吗

我试过用麻木,但没有改善。对于f2py,它可能会工作,但在这种情况下我宁愿跳过它。你知道吗

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]

我想找到一个方法来写它这样的方式来提高性能。我该怎么做?你知道吗


Tags: 方法in元素fornp方式时间zeros
1条回答
网友
1楼 · 发布于 2024-03-29 04:47:20

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

import numpy as np
from scipy.ndimage.filters import convolve

这是你的过错

g = np.ones((100,100,5) 

这里定义了卷积的“窗口”

ker = np.ones((1,11,1)) # = [[[1] [1] [1] [1] [1] [1] [1] [1] [1] [1] [1]]]

然后用一个处理边界的模式来计算卷积

# constant means that a 0-padding will be added to border to compute the convolution
fmat = convolve(g, ker, mode='constant') 

显示结果

print(fmat)

请参阅Here了解更多详细信息。你知道吗

编辑:

对于第二个维度,你需要对元素进行五乘五的求和。所以你要计算每个像素,这个像素周围的1x1x1窗口的总和(这是你的for循环,范围从j-5到j+5)。这可以使用卷积来计算(例如,对图像应用滤波器是卷积)。你知道吗

相关问题 更多 >