我需要使用我设置的步长计算 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类似的函数,我可以在其中设置步长?
如果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.]]])
注意:这假设窗口和步长相同,我认为这也是您在特定示例中所要求的