基于浮点索引对字典中扭矩数据插值的预构建方法咨询
用预构建工具实现浮点索引的线性插值
你可以直接用Python生态里的numpy.interp或者scipy.interpolate.interp1d来处理,完全不用手动计算上下整数索引,代码简洁还能复用。
方法1:用numpy的interp(轻量线性插值)
numpy.interp专门做一维线性插值,适配你的场景:
import numpy as np # 你的原始数据 j = {"46": [[88.0, 95.3], [86.1, 93.4], [84.2, 91.3], [82.8, 89.7], [80.8, 87.8]]} data_46 = j["46"] # 提取索引序列和两个数值序列 x_indices = np.arange(len(data_46)) # 生成[0,1,2,3,4] y1 = np.array([item[0] for item in data_46]) # [88.0, 86.1, 84.2, 82.8, 80.8] y2 = np.array([item[1] for item in data_46]) # [95.3, 93.4, 91.3, 89.7, 87.8] # 目标浮点索引 target_index = 1.85 # 直接计算两个数值的插值 interp_y1 = np.interp(target_index, x_indices, y1) interp_y2 = np.interp(target_index, x_indices, y2) print(f"索引1.85对应的第一个值:{interp_y1:.2f}") print(f"索引1.85对应的第二个值:{interp_y2:.2f}")
运行结果:
索引1.85对应的第一个值:84.57
索引1.85对应的第二个值:91.63
方法2:用scipy的interp1d(支持多种插值方式)
如果需要更复杂的插值(比如三次插值),或者要一次性处理多个目标索引,用scipy.interpolate.interp1d更灵活:
from scipy.interpolate import interp1d import numpy as np j = {"46": [[88.0, 95.3], [86.1, 93.4], [84.2, 91.3], [82.8, 89.7], [80.8, 87.8]]} data_46 = j["46"] x_indices = np.arange(len(data_46)) y1 = np.array([item[0] for item in data_46]) y2 = np.array([item[1] for item in data_46]) # 创建插值函数,可选'linear'(线性)、'cubic'(三次)等 f_y1 = interp1d(x_indices, y1, kind='linear') f_y2 = interp1d(x_indices, y2, kind='linear') # 单个目标索引 target_index = 1.85 interp_y1 = f_y1(target_index) interp_y2 = f_y2(target_index) # 也可以一次性处理多个索引,比如[1.2, 1.85, 2.5] # multi_interp_y1 = f_y1([1.2, 1.85, 2.5]) print(f"索引1.85对应的第一个值:{interp_y1:.2f}") print(f"索引1.85对应的第二个值:{interp_y2:.2f}")
核心优势
- 无需手动拆分浮点索引的整数/小数部分,函数自动完成上下界查找与插值计算
- 代码可封装成通用函数,换数据只需传入新的数据集和目标索引,复用性强
- 支持批量处理多个索引,效率远高于手动循环计算
内容的提问来源于stack exchange,提问作者PW1990
相关产品推荐
相关产品推荐

