#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 для получения спектров из данных о движении земли. Возможно, это будет полезно для вас.