You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对有序数据点进行线性插值,生成其连接线上的额外数值点

问题原因

scipy.interpolate.interp1d默认要求输入的自变量序列为单调递增序列,插值时会自动按自变量大小排序处理,完全忽略原始数据的排列顺序,因此直接对value1插值value2的方案不适用于这类路径型有序数据。

解决方案

采用参数化路径插值的方式实现需求,通过引入中间参数记录原始点的排列顺序,分别对两个维度做插值,即可得到沿原始路径分布的插值点,具体实现代码如下:

import numpy as np
from scipy import interpolate
import pandas as pd
import matplotlib.pyplot as plt

# 原始数据
df = pd.DataFrame({
    'value1': [1,4,2,3],
    'value2': [5,4,6,6]
})
ut = df['value1'].values
vt = df['value2'].values

# 构造路径参数t,用累计欧氏距离归一化得到,保证插值点分布均匀
# 计算相邻点距离
seg_distance = np.sqrt(np.diff(ut)**2 + np.diff(vt)**2)
# 累计距离后归一化到0-1区间
cum_distance = np.insert(np.cumsum(seg_distance), 0, 0)
t = cum_distance / cum_distance[-1]

# 分别拟合x、y关于t的线性插值函数
f_x = interpolate.interp1d(t, ut, kind='linear')
f_y = interpolate.interp1d(t, vt, kind='linear')

# 生成100个均匀分布的t值,计算对应的插值点
new_t = np.linspace(0, 1, 100, endpoint=True)
new_x = f_x(new_t)
new_y = f_y(new_t)

# 绘图验证结果
plt.plot(ut, vt, 'o-', label='原始路径')
plt.plot(new_x, new_y, '.', label='插值点')
plt.legend()
plt.show()

上述方案生成的插值点会严格遵循原始数据的排列顺序,沿原始折线分布,完全符合需求。

内容的提问来源于stack exchange,提问作者Bob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:48:04