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

为何scipy.interpolate插值后散点图仍有空缺?如何输出插值值?

解决scipy线性插值无效的问题

你的代码没生效是因为原始数据node_6中存在NaN值,interp1d默认不会自动忽略输入里的缺失值,导致插值函数在对应位置仍返回NaN。解决步骤如下:

修正后的代码

import numpy as np
import matplotlib.pyplot as plt
import scipy.interpolate as interpolate
# 提取目标数据列
node_6 = prob_1.iloc[:,1]
t = np.arange(5, 1441, 5)

# 1. 过滤掉含NaN的无效数据对
valid_mask = ~np.isnan(node_6)
t_valid = t[valid_mask]
node_6_valid = node_6[valid_mask]

# 2. 用有效数据创建线性插值函数
f6 = interpolate.interp1d(t_valid, node_6_valid, kind='linear', fill_value="extrapolate")
# 注:fill_value="extrapolate"用于补全有效数据范围外的空缺,本次xli在5-1440范围内,可省略

# 3. 生成插值后的数值
xli = np.linspace(5, 1440, 10000)
y_6 = f6(xli)

# 4. 输出插值后的数值(示例:打印前10组,或保存为CSV)
print("插值后前10组数值对:")
print(np.column_stack((xli[:10], y_6[:10])))
# 保存为文件:np.savetxt("interpolated_data.csv", np.column_stack((xli, y_6)), delimiter=",", header="time,value", comments="")

# 5. 绘制散点图
plt.scatter(xli, y_6, c='r', s=1)
plt.xlabel("时间(分钟)")
plt.ylabel("插值后数值")
plt.show()

关键说明

  • 过滤无效数据:通过~np.isnan(node_6)生成有效数据掩码,仅保留有数值的时间点和对应数据,这是插值生效的核心前提。
  • 插值函数参数:如果有效数据覆盖了5-1440分钟的全范围,fill_value参数可省略;若首尾存在缺失,fill_value="extrapolate"会用线性外插补全空缺。
  • 结果输出:可通过np.savetxt将插值后的时间-数值对保存为CSV文件,方便后续使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 10:20:41