是否有 python 友好的函数来计算 3D 数据的移动平均值?

Is there a python friendly function to calculate moving average for 3D data?

我正在尝试使用简单的移动平均滤波器创建平滑的等高线图。我有一个 .CSV,它具有三列 x、y(它们是位置)和 z,它是给定 x、y 处的热量。每列有 23,236 个值。我分别为 x 和 y 尝试了 1d 移动平均线。考虑到数据的大小,它在平滑方面既不快速也不有效。我会申请任何帮助。下面的代码绘制了等高线图。

df = 'D:/F1_amp .csv'
df = pd.read_csv("F1_amp.csv");
Z = df.pivot_table(index='x', columns='y', values='z').T.values
X_unique = np.sort(df.x.unique())
Y_unique = np.sort(df.y.unique())
X, Y = np.meshgrid(X_unique, Y_unique)

pd.DataFrame(Z).round(3)
pd.DataFrame(X).round(3)
pd.DataFrame(Y).round(3)

plt.contourf(X, Y, Z, 20, cmap='hot')
plt.colorbar();

您可以通过 Convolution 执行此操作。这种方法快速且易于推广。 对于 2D 卷积,您可以使用 scipy.signal.covolve2d()。您可以改变内核的大小和值,我使用常量 3x3 内核作为示例。

import numpy as np
import scipy.signal as sg

kernel_shape = (3, 3)
kernel = np.full(kernel_shape, 1/np.prod(kernel_shape))
z = sg.convolve2d(z, kernel, mode='valid')