如何在Python调用的matlab函数中传递dict作为参数

2024-04-19 23:18:26 发布

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

我正在制作一个调用matlab函数的软件,我想在matlab函数中传递一个dict作为参数,使用matlab.engine软件在python中。你知道吗

像这样:

def Parametrize(confFile):
    """ Return

    Argument:
    confFile    --  str()   Configuration File path

    Function that call MatLab function passing handles structure/dict as
    argument. The return value of MatLab function called Parametrize(handles)
    is the modified handles structure.
    """
    print("ouai")
    test = dict()
    keys = range(4)
    values = ["Hi", "I", "am", "John"]
    for i in keys:
        test[str(i)] = values[i]
    eng = matlab.engine.start_matlab()
    eng.addpath(vssFolderPath)
    res = eng.Transit(test)
    print(type(res))
    print(res)

matlab函数非常基本,我正在测试如何将数据从Python传递到matlab:

function a = Transit(test)
field = 'Value1';
value = {'TEST'};
disp(test)
a = struct(field,value);

我总是有这样的错误:

ValueError: invalid field for MATLAB struct

但是我读了这个document解释了如何将数据从python传递到matlab,我不知道为什么它对我不起作用。你知道吗


Tags: 函数testfield软件valuefunctionreseng
1条回答
网友
1楼 · 发布于 2024-04-19 23:18:26

上面写着:

screenshot of MATLAB documentation for passing a dict to python

如果您的键是数字的,则不支持将字典传递给MATLAB。我认为这也适用于转换成字符串的数字。从你的代码看,你的字典是:

test={'0':'Hi','1':'I','2':'am','3':'John'}

这里的键虽然是字符串,但是是数字[0-9]。你知道吗

MATLAB中的字段名不能以数字字符[0-9]^{})开头。尝试更改键以字母字符[a-zA-Z]开头。在您的例子中,似乎MATLAB正在尝试从键创建字段名,但是失败了,因为字段名以一个数字开头,而根据docs,MATLAB不支持这个数字。你知道吗

相关问题 更多 >