Я вызываю функцию Matlab в python через механизм Matlab, и у меня возникают проблемы с передачей переменных. Я понял, как передать некоторые, но при этом получаю сообщение об ошибке. должен быть скалярным целым числом. но когда я передаю его, я получаю сообщение об ошибке:
File "C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ matlab_internal \ mlarray_utils.py", строка 90, в _normalize_size, если init_dims [0] == 0:
IndexError: индекс кортежа вне допустимого диапазона
Код работает нормально Если я не передаю переменную modn, поэтому я знаю, что моя проблема в тип преобразования в matlab этой переменной.
это код python:
import numpy as np
import matlab
import matlab.engine
eng = matlab.engine.start_matlab()
eng.cd()
Nn = 30
x= 250*np.ones((1,Nn))
y= 100*np.ones((1,Nn))
z = 32.0
xx = matlab.double(x.tolist())
yy = matlab.double(y.tolist())
f=np.arange(start=0.1,stop=0.66,step=0.1)
modnv=np.concatenate((np.ones((Nn)),2*np.ones((Nn))))
count = 0
for fks in f:
fks=np.float(0)
modn = modnv[count]
modn = modn.astype(int)
modn = matlab.int8(modn)
Output = eng.simple_test(xx,yy,z,fks,modn,nargout=4)
A = np.array(Output[0]).astype(float)
B = np.array(Output[1]).astype(float)
C = np.array(Output[2]).astype(float)
D = np.array(Output[3]).astype(float)
count = count + 1
и это функция matlab simple_test:
function [A,B,C,D] = simple_test(x,y,z,fks,modn)
if modn == 1
A = 3*x+2*y;
B = x*ones(length(x),length(x));
C = ones(z);
D = x*y';
else
A = 3*fks;
B = 3*x+2*y;
C = A+B;
D = x*y'
end
Кто-нибудь знаете, как это преодолеть?