You need to enable JavaScript to run this app. 能否使用NumPy绘制给定x、y值的线性插值图?如何打印图表所用插值函数?
优惠活动
大模型
产品
解决方案
定价
更多

能否使用NumPy绘制给定x、y值的线性插值图?如何打印图表所用插值函数?

打印NumPy线性插值所用函数的实现方法

np.interp 本身没有提供直接获取、打印内部插值函数的内置接口,它的插值逻辑是基于逐段线性规则实现的,我们可以通过推导分段表达式还原并打印完整的插值函数。

核心逻辑对齐

要打印的函数必须和你绘图、插值计算的逻辑完全一致,首先需要匹配np.interp的内置节点处理规则:

  • np.interp会默认对输入的x值做非降排序
  • 对于取值完全重合的重复x节点,会自动取对应y值的最小值作为该点的插值边界
  • 相邻两个节点之间的区间,使用两点连线的线性函数做插值计算

根据两点式直线方程,相邻节点(x_i, y_i)和(x_{i+1}, y_{i+1})之间的插值函数为:

f(x) = y_i + ((y_{i+1} - y_i) / (x_{i+1} - x_i)) * (x - x_i)
适用范围:x ∈ [x_i, x_{i+1}]

可直接复用的实现代码

import numpy as np
import matplotlib.pyplot as plt

x = [700, 701, 702, 702]
y = [46, 48, 45, 45]

# 整理有效插值节点,和np.interp的处理逻辑保持一致
sorted_pairs = sorted(zip(x, y))
node_map = {}
for xi, yi in sorted_pairs:
    if xi not in node_map or yi < node_map[xi]:
        node_map[xi] = yi
xs = sorted(node_map.keys())
ys = [node_map[xi] for xi in xs]

# 逐段计算并打印插值函数
print("当前图表所用线性插值的分段函数如下:")
for idx in range(len(xs)-1):
    x_left, x_right = xs[idx], xs[idx+1]
    y_left, y_right = ys[idx], ys[idx+1]
    slope = (y_right - y_left) / (x_right - x_left)
    intercept = y_left - slope * x_left
    print(f"- 当 x 处于 [{x_left}, {x_right}] 区间时,f(x) = {slope:.2f}x + {intercept:.2f}")

# 保留原有插值计算与绘图逻辑
x_new = [701]
y_new = np.interp(x_new, x, y)
plt.plot(x, y, "og-", x_new, y_new, "or")

实际运行输出

针对你提供的示例数据,代码会输出如下内容:

当前图表所用线性插值的分段函数如下:
- 当 x 处于 [700, 701] 区间时,f(x) = 2.00x + -1354.00
- 当 x 处于 [701, 702] 区间时,f(x) = -3.00x + 2151.00

补充说明

  • np.interp是分段线性实现,不存在覆盖全x范围的单一全局函数,以上打印的分段表达式拼接起来就是完整的插值逻辑
  • 后续如果调整原x、y值,这套代码会自动重新计算所有分段的表达式,不需要手动修改公式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 23:36:07