将numpy int转换为matlab int

2024-06-17 11:15:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我通过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

有人知道如何克服吗


Tags: 函数importoutputcountnponesnnfloat
1条回答
网友
1楼 · 发布于 2024-06-17 11:15:24

每当出现IndexError: tuple index out of range错误时,其主要原因是:

  1. 可能其中一个索引是错误的。我怀疑你的意思是说[0]在你说[1]的地方[1]在你说[2]的地方。在Python中,索引是基于0的
  2. 您正在将数组传递给一个函数,该函数需要可变参数序列(例如'{}{}'.format([1,2]) vs '{}{}'.format(*[1,2]

相关问题 更多 >