x 数组从负到正的意外 numpy 插值行为(按递增顺序排列)

Unexpected numpy interpolation behavior for x array spanning negative to positive (ordered as increasing)

使用 np.interp(query, x, y) 产生的结果与我有时在 Excel 中计算的结果相同。这是 np.interp() 和 Excel 一致的情况:

import pandas as pd
import numpy as np

df = pd.DataFrame(
    {'x': [-9.210,-6.908,-4.605,-2.303,0.000,2.303],
     'y': [-1.867,-1.867,-2.027,-3.667,-7.850,-21.112]}
)

val = -7.313

test1 = np.interp(val, df['x'], df['y'])

并且 print(test1) 产生 -1.867。这正是我在 Excel 中计算的结果,它看起来是正确的(我们的查询值在黄色值之间):


然而,test2 = np.interp(val, df['y'], df['x']) 产生 2.303。在Excel中,我计算了-0.2956,这看起来是正确的,因为我们的查询值在黄色值之间。


numpy 中是否存在某种奇怪的行为,在尝试插值时从负到零再到正感到困惑?我已经尝试使用更加描述化的数据框(50 行而不是这 6 行),并且值始终按递增顺序排列,我遇到了同样的问题。

预测值列中的值必须按升序排列。 (注意:-21 在数轴上小于 -1.8,-1 小于 1。)使用 sort_values 将数据框按 y 列升序排序,然后输出匹配你的 Excel 输出.

df1=df.sort_values(by="y")

test3= np.interp(val, df1["y"], df1["x"])

print(test3)

-0.29565168539325837