我通过matlab引擎调用python中的matlab函数,在传递变量时遇到问题。 我已经想出了如何传递一些,但对于这个,我得到了一个错误。应该是标量int。 但当我通过它时,我得到了一个错误:
File "C:\ProgramData\Anaconda3\lib\site-packages\matlab_internal\mlarray_utils.py", line 90, in _normalize_size if init_dims[0] == 0:
IndexError: tuple index out of range
如果我不传递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_测试:
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
有人知道如何克服吗
每当出现
IndexError: tuple index out of range
错误时,其主要原因是:[0]
在你说[1]
的地方[1]
在你说[2]
的地方。在Python中,索引是基于0的李>'{}{}'.format([1,2]) vs '{}{}'.format(*[1,2]
)相关问题 更多 >
编程相关推荐