У меня есть Numpy массив поплавки, которые, когда печатная выглядеть следующим образом: scipy.optimise.bisect на Numpy массива
красных кругов являются первоначальными значениями, синие кресты линейной интерполяции с использованием numpy.interp
.
Я хотел бы найти абсцисс нулевого пересечения этого массива numpy (красный круг), используя scipy.optimize.bisect
(например). Поскольку это массив 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.
Я интересно:
- , если это правильный технический способ использовать scipy.optimize.bisect на NumPy массива? Специально, когда я собираюсь сделать это 10^6 раз при разных наборах значений numpy.
- если принуждение к линейной интерполяции не влияет на результаты , что bisect собирается найти, и если да, есть ли лучший выбор?
Вот два 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])
спасибо. Он работает отлично. Какой алгоритм используется в scipy.interpolate.interp1d? – gregory
@gregory 'scipy.interpolate.interp1d' поддерживает различные методы интерполяции. Значение по умолчанию является линейным, вы также можете указать сплайн-интерполятор более высокого порядка с помощью аргумента 'kind'. Более подробную информацию вы найдете в [документации] (https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.interp1d.html). –