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

如何高效对(n,2)型NumPy数组逐行线性插值(无循环)

高效实现逐行线性插值方案

因为你是对每行仅有的两个点做线性插值,直接用线性插值的数学公式是最高效的方案,完全利用NumPy的向量化运算,无需循环,性能最优。

手动计算(推荐)

import numpy as np

y = np.array([[.2,.4], [.3, .6], [.4, .8]])
xl = 5
xh = 10
x = 7.5

# 计算插值权重:(目标x - 下界x)/(上界x - 下界x)
weight = (x - xl) / (xh - xl)
# 逐行计算插值结果:下界y + 权重*(上界y - 下界y)
result = y[:, 0] + weight * (y[:, 1] - y[:, 0])

print(result)

输出结果:

[0.3  0.45 0.6 ]

错误原因分析与修正方案

SciPy interp1d 报错原因

你传入的[y[:,0], y[:,1]]是**(2, n)**形状的数组,而x是长度为2的一维数组。interp1d默认沿最后一维插值,会认为插值维度长度为n,与x的长度2不匹配。

修正后的用法(但性能不如手动计算):

from scipy.interpolate import interp1d

f = interp1d([xl, xh], y, axis=1)  # 指定沿每行(第二维)插值
print(f(7.5))

NumPy np.interp 报错原因

np.interp仅支持一维的y输入,无法直接处理二维数组。

修正后的用法(性能仍逊于手动计算):

result = np.interp(x, [xl, xh], y.T).T  # 转置数组适配一维输入要求
print(result)

方案对比

对于仅两个端点的线性插值,手动计算加权平均是最优选择:

  • 避免了通用插值函数的额外开销
  • 完全基于NumPy向量化运算,处理大型矩阵时速度更快、内存占用更低

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:34:59