我有两个x和y数组。我没有两个数组之间的关系,但我希望能够在点之间线性插值到y = f(x),这样我就可以计算x值,其中y = 0.95。我到目前为止使用的方法如下:
import numpy as np
from scipy.interpolate import interp1d
def NearestValue(array,value):
#returns the index of the element of the array which is closest to value
idx = (np.abs(array-value)).argmin()
return idx
x =[[ 0. ],[ 9.9],[ 19.8],[ 31.5],[ 41.9],[ 49.1],[ 59. ],[ 70. ],[ 80.4],[ 100. ]]
y= [ 0.011905, 0.140795, 0.600562, 0.757247, 0.874564, 0.934559, 0.961719, 0.986099, 0.990284, 0.998254]
f = interp1d(x,y)
x_new = np.linspacex(x[0],x[9],1000)
y_new = f(x_new)
NearestIndex = NearestValue(y_new,0.95)
x_nearest = x_new[NearestIndex]
此方法返回x_new中的值,该值具有最接近0.95的最接近的对应y_new值。有没有办法可以计算出y值正好为0.95的x值?
答案 0 :(得分:1)
我认为这就像插入x
作为y
的函数一样简单(我还需要展平x
以避免错误):
import numpy as np
from scipy.interpolate import interp1d
def NearestValue(array,value):
#returns the index of the element of the array which is closest to value
idx = (np.abs(array-value)).argmin()
return idx
x =[[ 0. ],[ 9.9],[ 19.8],[ 31.5],[ 41.9],[ 49.1],[ 59. ],[ 70. ],[ 80.4],[ 100. ]]
y= [ 0.011905, 0.140795, 0.600562, 0.757247, 0.874564, 0.934559, 0.961719, 0.986099, 0.990284, 0.998254]
f = interp1d(y, np.array(x).flatten())
print (f(0.95))
for i,_ in enumerate(y):
print (_, x[i][0], f(_))
编辑:我冒昧地用三行代替回答者提供的最后一行代码,这些代码表明这个解决方案有多好用。它们产生以下输出。
54.728346833578776
0.011905 0.0 0.0
0.140795 9.9 9.9
0.600562 19.8 19.8
0.757247 31.5 31.5
0.874564 41.9 41.9
0.934559 49.1 49.1
0.961719 59.0 59.0
0.986099 70.0 70.0
0.990284 80.4 80.4
0.998254 100.0 100.0