我在这个论坛上看到了一些关于应用移动窗口中值滤波的讨论,但我的应用程序有一个特殊之处。在
我有一个三维数组的维数750x12000x10000,我需要应用中值滤波器来生成一个二维数组(12000x10000)。为此,每个中值计算应考虑一个固定的邻域窗口(通常100x100)和所有z轴值。矩阵中有一些零值,在计算中值时不应考虑这些零值。要处理实际数据,我使用numpy.memmap:fp = np.memmap(filename, dtype='float32', mode='w+', shape=(750, 12000, 10000))
为了处理memmap存储的真实数据,我的输入数组被细分为几个块,但是为了提高测试的速度,我将在本文中使用一个简化的数组(11,200,300)和一个更小的窗口(11,5,5)或(11,50,50),我希望得到一个结果矩阵(200,300):
^{pr2}$
首先,我尝试过蛮力方法,但是它的速度非常慢(即使对于小数组):start = timer()
for l in range(0, ysize):
i_l = max(0, l - w_size/2)
o_l = min(ysize, i_l+w_size/2)
for c in range(0, xsize):
i_c = max(0, c - w_size/2)
o_c = min(xsize, i_c+w_size/2)
values = m_in[:, i_l:o_l, i_c:o_c]<