np.interp()适用于未处理的列表,但在我将函数应用于它之后就不行了



如果我使用下面的代码

import numpy as np
xs = [5, 7.5, 10, 15, 30, 90, 270]
ys = [2, 5, 10, 15, 20, 30, 50]
PH = [200, 200, 200, 200, 200, 200, 200]
ys = [((x*100)/ph) for x,ph in zip(ys, PH)]
yData = [round(x,2) for x in ys]
xData = [1/x for x in xs]
xinterp = np.arange(min(xData), max(xData), 0.01)
yinterp = np.interp(xinterp, xData, yData)
print(xinterp) 
print(yinterp)

我得到:

[0.0037037 0.0137037 0.0237037 0.0337037 0.0437037 0.0537037 0.0637037
0.0737037 0.0837037 0.0937037 0.1037037 0.1137037 0.1237037 0.1337037
0.1437037 0.1537037 0.1637037 0.1737037 0.1837037 0.1937037]
[ 1. 25. 25. 25. 25. 25. 25. 25. 25. 25. 25. 25. 25. 25. 25. 25. 25. 25.
25. 25.]

但是,如果我使用直接值fox x和y:

import numpy as np
xData = [0.0037037, 0.0111, 0.0333, 0.0666, 0.1, 0.1333, 0.2]
yData = [2, 5, 10, 15, 20, 30, 50]
xinterp = np.arange(min(xData), max(xData), 0.01)
yinterp = np.interp(xinterp, xData, yData)
print(xinterp) 
print(yinterp)

我得到了预期值:

[0.0037037 0.0137037 0.0237037 0.0337037 0.0437037 0.0537037 0.0637037
0.0737037 0.0837037 0.0937037 0.1037037 0.1137037 0.1237037 0.1337037
0.1437037 0.1537037 0.1637037 0.1737037 0.1837037 0.1937037]
[ 2.          5.58641892  7.83867117 10.06061562 11.56211712 13.06361862
14.56512012 16.06342814 17.56043413 19.05744012 21.11222222 24.11522523
27.11822823 30.12104948 33.11955022 36.11805097 39.11655172 42.11505247
45.11355322 48.11205397]

我真的不明白未处理的数据和直接从列表中获取的数据之间的区别,有人能帮我吗?

您实际上正在对不同的插值进行处理
在第一个示例中,您为插值

xData = [0.2, 0.13333333333333333, 0.1, 0.06666666666666667, 0.03333333333333333, 0.011111111111111112, 0.003703703703703704]
yData = [1.0, 2.5, 5.0, 7.5, 10.0, 15.0, 25.0]

但在第二个例子中,你正在为插值

xData = [0.0037037, 0.0111, 0.0333, 0.0666, 0.1, 0.1333, 0.2]
yData = [2, 5, 10, 15, 20, 30, 50]

我认为你的目标是让第一个例子和第二个例子一样,对吧?如果是,请尝试将其添加到第一个示例中:

xData.sort()
yData = np.array(yData) * 2