是否有 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')
我正在尝试使用简单的移动平均滤波器创建平滑的等高线图。我有一个 .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')