numpy的interp函数 - 如何找到给定y值的x值?

3

我有一个x值的数组(按升序排列)和相应的y值。Numpy的interp函数需要输入X值,x和y数组。如何根据给定的Y值获取X的值?例如,如果y = 0,则x =?

谢谢!

代码:

j = (((1840/(2*pi))**0.5)*exp(phi)) - 1.0 #y axis, phi is a 1-D array
t = linspace(0, 40, 100) #x axis
a = interp(<x-value>,t,j) # this gives me the corresponding y value! 

那么我应该怎么做才能得到给定y值的x值!


4
你需要它是为了这个特定的功能,还是为了一般情况?请记住,如果该功能不可逆,可能存在多个“x”对应同一个“y”。 - NPE
1
你的示例应该更加简洁,我不得不将 phi 替换为 t,并添加 from numpy import exp, linspace, interp, pi - Flavian Hautbois
2个回答

6

y_interp = np.interp(x_interp, x, y) 产生了一个函数的插值 y_interp = f(x_interp),基于之前的插值 y = f(x),其中 x.size = y.size,x_interp.size = y_interp.size。

如果你想把 x 作为 y 的函数,你需要构建它的反函数。正如@NPE所指出的,你必须确保 x 和 y 总是在增加。一种简单的方法是使用

np.all(np.diff(x) > 0)
np.all(np.diff(y) > 0)

现在,找到反函数其实非常简单:您需要颠倒x和y的角色(因为我们处理的是插值)。
使用我的符号:x_value = np.interp(y_value, x, y)
使用您的符号:x_value = interp(y_value, j, t)

反转函数搞定了!是的,@NPE,我需要它来处理这个特定的函数。幸运的是,j的值随着x的增加而下降,因此我只需要交换角色就得到了答案。非常感谢,我很感激 :) - Omkar Myatra
1
只是想知道:如果 y_interp = np.interp(x_interp, x, y),那么应该是 x_value = np.interp(y_value, y, x),而不是 x_value = np.interp(y_value, x, y) 吗?(就像 interp(y_value, j, t)interp(<x-value>,t,j) 的反函数一样) - sdbbs

0

在使用Numpy时,请确保您正在使用Numpy数组:np.array([])

#x data array
x_data = np.array([1,2,3,4])
    
#y data array
y_data = np.array([1,3,2,1])

#the known max y value is 3
y_max = 3
            
# sort the arrays
order = y_data.argsort()
y_data = y_data[order]
x_data = x_data[order]
        

# call the interpolation function but reverse the array datasets to find the corresponding x value       
x = np.interp(y_max, y_data, x_data,  left=None, right=None, period=None)

在这个例子中,当最大值y = 3时,结果为x = 2。 最大值为(2,3)。
此外,您可以将数据附加到numpy数组: x_data = np.append(x_data,appendedValue)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接