python - 是否有 python 友好的函数来计算 3D 数据的移动平均值?
问题描述
我正在尝试通过使用简单的移动平均滤波器来创建平滑的等高线图。我有一个.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')
推荐阅读
- node.js - 如何为多个容器构建 Docker-compose 文件
- reactjs - 反应下载图像而不是显示在新标签中
- javascript - 我不知道如何将从 jsp 中提取的值发送到另一个页面(在使用中)
- oracle - APEX 甲骨文 OAUTH2
- scala - Spark Elasticsearch 连接器无法将日期解析为日期。它们被解析为 Long
- javascript - 未捕获的 TypeError:无法在“FileReader”上执行“readAsText”:参数 1 不是“Blob”类型
- .net - typeerror:在发送请求之前未能获取 blazor webassembly 控制器
- date - 如何在 Groovy 中转换和检查不同格式的日期
- python - Tensorflow:AttributeError:'dict'对象没有属性'train'
- regex - 使用正则表达式在记事本++中粘贴行略有变化