NumPy插值返回错误结果的问题求助
NumPy插值返回错误结果的问题求助
看起来你在使用np.interp时踩了两个关键坑,导致结果和预期差得很远,咱们一步步捋清楚问题出在哪,再解决它:
问题1:x和y的对应关系被打乱了
你单独对x数组做了排序,但完全没同步调整y数组,这就把原本一一对应的(x,y)配对数据彻底搞错位了。比如原来x=0.250对应y=54.9,排序后x的顺序变了,但y还是原来的顺序,插值的时候自然找不到正确的对应关系。
问题2:没满足np.interp的参数规则
np.interp的语法是np.interp(目标点, 自变量数组, 因变量数组),而且要求自变量数组必须是单调递增的。你现在想找y=60对应的x值,本质是把y当自变量、x当因变量,但你的y数组是递减的,再加上之前的配对错位,结果肯定不对。
修正后的代码
咱们先把原始的(x,y)数据配对好,按y值从小到大排序(满足自变量单调递增的要求),再进行插值:
import numpy as np # 原始配对数据,保证x和y一一对应 x = [4.75, 2.00, 0.850, 0.425, 0.250, 0.180, 0.150, 0.075] y = [100, 94.5, 86.3, 74.1, 54.9, 38.1, 9.3, 1.7] # 将(x,y)配对后按y值升序排序,确保自变量单调递增 sorted_pairs = sorted(zip(y, x), key=lambda item: item[0]) sorted_y, sorted_x = zip(*sorted_pairs) # 插值y=60对应的x值 xi = np.interp(60, sorted_y, sorted_x) print(xi)
运行这段代码后,输出会是0.287左右,和你预期的0.27非常接近——这是因为原始数据里y=54.9对应x=0.250,y=74.1对应x=0.425,线性插值的结果本来就在这个区间里,和你的预期偏差是合理的。
备注:内容来源于stack exchange,提问作者Kama zaki
相关产品推荐
相关产品推荐

