如何加快数组中元素的总和?

问题描述 投票:0回答:1

我想这样做一个三维阵列的总和,但分组的元素N乘N。这样做明确它需要大量的执行时间。

我曾尝试与numba,它并没有改善。随着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]

我想找到一种方法把它写在这样一个以提高性能的方式。我该怎么做?

python numba f2py
1个回答
0
投票

如果您可以使用SciPy的则是有正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了解更多详情。

编辑:

要通过五个第二维度和元素五位。所以,你要计算每个像素,解决这个像素1x11x1窗口的总和(这是你的for循环与J-5到j + 5的范围内)。这可以使用一个卷积来计算(例如:将滤波器应用于的图像是卷积)。

© www.soinside.com 2019 - 2024. All rights reserved.