Как преобразовать функцию Matlab с ‘interp1’, используя два массива и ссылку, в Python с ‘interp1d’

#python #matlab #interpolation

#python #matlab #интерполяция

Вопрос:

Я использовал свой код Matlab следующим образом

 Fas=[1.4, 1.4, 1.3]
Fvs=[1.5, 1.4, 1.3]

if S<=0.1
Fa=Fas(1);
Fv=Fvs(1);

elseif S<=0.2
Fa=interp1([0.1 0.2],[Fas(1) Fas(2)],S);
Fv=interp1([0.1 0.2],[Fvs(1) Fvs(2)],S);
end
 

затем я хочу преобразовать его для Python с помощью interp1d

итак, я написал так

 if S<=0.1:
    Fa=Fas[0]
    Fv=Fvs[0]
elif S<=0.2:
    Fa=interp1.interp1d([0.1, 0.2],[Fas[0], Fas[1]],S)
    Fv=interp1.interp1d([0.1, 0.2],[Fvs[0], Fvs[1]],S)
 

затем я получил сообщение об ошибке, подобное этому

 
  Traceback (most recent call last):
  File "main.py", line 15, in <module>
    [Spa_design,Fa,Fv,Sds,Sd1,To,Ts,Tl]=spe(site,S,T)
  File "/home/runner/timehistoryspectrumscale/Design_spectrum.py", line 28, in 
  Design_spectrum
    Fa=interp1.interp1d([0.1, 0.2],[Fas[0], Fas[1]],S)
  File "/opt/virtualenvs/python3/lib/python3.8/site- 
  packages/scipy/interpolate/interpolate.py", line 444, in __init__
    raise NotImplementedError("%s is unsupported: Use fitpack "
  NotImplementedError: 0.176 is unsupported: Use fitpack routines for other 
  types.


 

Я использую код интерполяции с (и S = 0,176)

    from scipy import interpolate as interp1

 

Я новичок, поэтому я не знаю точной грамматики этого модуля. но я хочу найти способ интерполяции с использованием двух массивов со ссылочным значением by interp1d .

Комментарии:

1. Ваш код Matlab, вероятно, нуждается в другом, и вам нужно (а) внимательно прочитать, а затем (б) опубликовать все сообщение об ошибке

2. Прошу прощения за недопустимый код. Я неправильно написал пример. Измените последние три строки следующим образом. «‘elseif S<= 0.2 Fa = interp1 ([0.1 0.2],[Fas (1) Fas (2)], S); Fv = interp1 ([0.1 0.2], [Fvs (1) Fvs (2)], S); конец «‘

3. затем я внимательно прочитал сообщение об ошибке, после чего обнаружил, что тип переменной указан как функция. итак, я получил желаемый результат, добавив код Fa = Fa (S), но сомнительно, является ли это лучшим. »

4. Пожалуйста, отформатируйте ошибку как код

Ответ №1:

scipy.interpolate.interp1d возвращает функцию, чтобы вы могли вызвать эту функцию с аргументом

 from scipy import interpolate
Fas = np.array([1,2,3])
Fvs = np.array([1,2,3])

S = 0.15

if S<=0.1:
    Fa=Fas[0]
    Fv=Fvs[0]
elif S<=0.2:
    fa = interpolate.interp1d([0.1, 0.2] , [Fas[0], Fas[1]])
    Fa = fa(S)
    fv = interpolate.interp1d([0.1, 0.2] , [Fvs[0], Fvs[1]])
    Fv = fa(S)
 

Я думаю, вы имеете дело со спектрами. Только вчера я написал код на Python для получения спектров из данных о движении земли. Возможно, это будет полезно для вас.