如何计算具有步长的 3D 数组的移动平均值?

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

我需要使用我设置的步长计算 3D 数组的移动平均值。我现在正在做的是

 img = np.ones(10,10,50)
 img_new = bottleneck.move.move_mean(img, window=5, axis=2)

虽然bottleneck.move.move_mean足够快来处理图像,但不幸的是它不允许我设置步长。这会导致大量开销,因为没有必要计算 5 个窗口中 4 个窗口的平均值。

是否有与bottleneck.move.move_mean类似的函数,我可以在其中设置步长?

python numpy-ndarray moving-average array-broadcasting numpy-slicing
1个回答
0
投票

如果IIUC你可以直接使用

numpy
重塑数据后的均值:

shape = (2,2,5)
len_ = np.prod(shape)
img = np.linspace(1,len_,len_).reshape(shape) # init

初始化数组:

array([[[ 1.,  2.,  3.,  4.,  5.],
        [ 6.,  7.,  8.,  9., 10.]],

       [[11., 12., 13., 14., 15.],
        [16., 17., 18., 19., 20.]]])

代码:

step = 5 # same as window size
# shape[2]/step == int(shape[2]/step) # maybe add this check!
img.reshape(shape[0], shape[1], step, int(shape[2]/step)).mean(2)

输出:

array([[[ 3.],
        [ 8.]],

       [[13.],
        [18.]]])

注意:这假设窗口和步长相同,我认为这也是您在特定示例中所要求的

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