使用圆形掩码进行平均

Averaging using a circular mask

我想知道下面的 python 脚本是否有任何优化,因为对我来说它运行得相当慢。我想要的是从矩阵 Z 的当前元素获取半径 r 内的平均值。X 和 Y 具有与 Z(二维数组)相同的维度。有没有人有改进的解决方案?提前谢谢你。

Z_mean = np.zeros(Z.shape)
for ii, zz in np.ndenumerate(Z):
    msk = (X-X[ii])**2 + (Y-Y[ii])**2 <= r**2
    Z_mean[ii] = np.nanmean(Z[msk])     

先构造一个循环均值核:

x = np.arange(-r, r+1)
kernel = (x[None,:]**2 + x[:,None]**2 <= r**2).astype(float)
kernel /= np.sum(kernel)

然后应用到Z:

from scipy.signal import convolve2d
Z_mean = convolve2d(Z, kernel)