3x21525数组插值需求:将Raw_y_data从-375.01插值至-400
技术实现方案
核心思路
现有数据中Raw_y_data的最大值为-375.01(最靠近0的取值),当前数据未覆盖到Raw_y_data=-400的范围。我们需要通过插值补充Raw_y_data从当前最小值到-400之间的数据点,同时生成对应的Horizontal_Distance_x和Density插值结果,最终得到包含新增插值点的3维数组。
步骤与代码实现
1. 加载并预处理数据
直接读取已生成的x_y_density2.csv即可,也可以在原数据处理代码的基础上直接用df2继续操作:
import pandas as pd import numpy as np from scipy.interpolate import interp1d # 读取处理后的数据 df2 = pd.read_csv("x_y_density2.csv") # 按Raw_y_data升序排列(确保插值用的自变量有序) df_sorted = df2.sort_values(by="Raw_y_data")
2. 定义插值目标与插值函数
生成从-400到当前Raw_y_data最大值(-375.01)的目标y值,再基于现有数据插值得到对应的x和密度值:
# 提取现有数据的核心数组 y_existing = df_sorted["Raw_y_data"].values x_existing = df_sorted["Horizontal_Distance_x"].values density_existing = df_sorted["Density"].values # 生成插值目标y值:从-400到-375.01,步长可按需调整(这里设为0.1) y_target = np.arange(-400, -375.01, 0.1) # 手动加入-375.01,避免遗漏原始最大值点 y_target = np.append(y_target, -375.01) # 创建插值函数:线性插值计算快、结果平稳;需要平滑曲线可替换为'cubic'(三次样条) interp_x = interp1d(y_existing, x_existing, kind='linear', fill_value="extrapolate") interp_density = interp1d(y_existing, density_existing, kind='linear', fill_value="extrapolate") # 计算插值后的x和密度值 x_interpolated = interp_x(y_target) density_interpolated = interp_density(y_target)
3. 合并数据并生成最终数组
把原始数据和插值数据合并,转换成要求的3xN数组格式:
# 组合插值后的数据集 df_interpolated = pd.DataFrame({ "Horizontal_Distance_x": x_interpolated, "Raw_y_data": y_target, "Density": density_interpolated }) # 合并原始数据与插值数据,去重避免重复点,再重新排序 df_final = pd.concat([df2, df_interpolated]).drop_duplicates(subset=["Raw_y_data"]).sort_values(by="Raw_y_data") # 转换为3行N列的数组(行对应三个特征,列对应样本) final_array = df_final[["Horizontal_Distance_x", "Raw_y_data", "Density"]].values.T
4. 验证与输出
# 检查插值结果是否符合要求 print(f"Raw_y_data最小值:{df_final['Raw_y_data'].min()}") print(f"最终数组形状:{final_array.shape}") # 保存插值后的完整数据集 df_final.to_csv("x_y_density_interpolated.csv", index=False)
关键说明
- 插值方法选择:线性插值(
kind='linear')适合大多数场景,计算高效且结果稳定;如果需要更平滑的曲线,可替换为三次样条插值(kind='cubic'),但需注意原始数据是否存在噪声,避免过度拟合。 - 自变量调整:如果你的数据是按
Horizontal_Distance_x有序分布的,也可以将x作为自变量,插值得到Raw_y_data=-400对应的x和密度值,具体需结合数据的物理意义调整。 - 边界处理:
fill_value="extrapolate"参数允许在现有数据范围外进行外插,确保能精准延伸到Raw_y_data=-400的位置。
内容的提问来源于stack exchange,提问作者Achelia
相关产品推荐
相关产品推荐

