我有一个粗大的浮标数组,打印时如下所示:

红圆是原始值,蓝色十字是用numpy.interp进行的线性插值。
我希望使用scipy.optimize.bisect (例如)找到这个numpy数组(红色圆)的零交叉的横坐标。因为这是一个numpy数组(而不是函数),所以我不能直接将它传递给scipy.optimize.bisect。所以我想传递一个函数,将numpy数组内插到二分。下面是我目前使用的代码:
def Inter_F(x,xp,fp):
return np.interp(x,xp,fp)
Numpyroot = scp.optimize.bisect(Inter_F,0,9,args=(XNumpy,YNumpy)) 我发现一个似乎是正确的值,Numpyroot = 3.376425289196618。
我想知道:
下面是两个numpy数组:
XNumpy = array([ 0. , 1.125, 2.25 , 3.375, 4.5 , 5.625, 6.75 , 7.875, 9. ])
YNumpy = array([ -2.70584242e+04, -2.46925289e+04, -1.53211676e+04,
-2.30000000e+01, 1.81312104e+04, 3.41662461e+04,
4.80466863e+04, 5.75113178e+04, 6.41718009e+04])发布于 2017-02-07 18:40:15
我认为你所做的是正确的。然而,有一个更简洁的方法。
import numpy as np
from scipy.interpolate import interp1d
XNumpy = np.array([0., 1.125, 2.25, 3.375, 4.5, 5.625, 6.75, 7.875, 9.])
YNumpy = np.array([
-2.70584242e+04, -2.46925289e+04, -1.53211676e+04,
-2.30000000e+01, 1.81312104e+04, 3.41662461e+04,
4.80466863e+04, 5.75113178e+04, 6.41718009e+04
])
invf = interp1d(YNumpy, XNumpy)
print(invf(0))结果:
array(3.376425289199028)在这里,我使用scipy.interpolate.interp1d返回一个函数。另外,我插值了逆函数,这样就可以很容易地计算出横坐标。当然,您也可以对np.interp执行同样的操作,我喜欢scipy.interpolate.interp1d,因为它返回一个函数,因此我可以从任何给定的y值中计算x值。
https://stackoverflow.com/questions/42075531
复制相似问题