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

如何对数组值类型数据执行NumPy插值?报ValueError错误

解决np.interp处理多维y数组的报错问题

报错原因

np.interp 默认仅支持一维的yp输入,当yp是二维数组(如示例中(3,4)的形状)时,函数无法正确解析多维结构,因此抛出ValueError: object too deep for desired array。

解决方案

方法1:用np.apply_along_axis批量处理

利用np.apply_along_axis将插值逻辑应用到yp的每一列(每一列对应一个独立的插值序列):

import numpy as np

xp = np.array([0.0, 1.0, 2.0])
yp = np.array(
    [
        [-1.1, 2.4, 5.1, 5.6],
        [7.1, -2.1, 9.1, 31.0],
        [1.1, 13.4, -5.2, 5.6],
    ]
)

# 对yp的每一列执行插值操作
result = np.apply_along_axis(lambda y_col: np.interp(0.4, xp, y_col), axis=0, arr=yp)
print(result)
# 输出:[3.02  1.4   6.7   14.24]

方法2:手动计算线性插值(更高效)

np.interp本质是线性插值,当目标x落在xp的两个已知点之间时,可直接计算权重完成插值,避免循环开销:

import numpy as np

xp = np.array([0.0, 1.0, 2.0])
yp = np.array(
    [
        [-1.1, 2.4, 5.1, 5.6],
        [7.1, -2.1, 9.1, 31.0],
        [1.1, 13.4, -5.2, 5.6],
    ]
)

x = 0.4
# 定位x所在的区间索引
idx = np.searchsorted(xp, x) - 1
# 计算插值权重
weight = (x - xp[idx]) / (xp[idx+1] - xp[idx])
# 执行线性插值
result = (1 - weight) * yp[idx] + weight * yp[idx+1]
print(result)
# 输出:[3.02  1.4   6.7   14.24]

补充说明

如果xp存在非单调的情况,需要先对xp及对应的yp按xp排序后,再执行上述插值操作。

内容的提问来源于stack exchange,提问作者Nico Schlömer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 10:02:18