【问题标题】:returning values from matlab to python (as a dictionary?)从matlab返回值到python(作为字典?)
【发布时间】:2019-01-31 07:39:23
【问题描述】:

我正在为 python 使用 matlab 引擎。我的目标是从 python 将一些信息传递给我的 matlab 脚本,然后存储结果。如果我创建了一个包含所有我想要的值的 matlab 数组,我就能够做到这一点,但我真的很想要一本字典(这样我就可以记住什么值与什么变量对应,或者如果我将来更改我的 matlab 脚本)。这是我尝试过的:

MATLAB 函数:

function out = mymatlabfunc(x,y)
    # compute stuff
    out = py.dict('interesting variable 1', x_out, 'interesting variable 2', y_out, ...);

在python中:

eng = matlab.engine.start_matlab()
xdata, ydata = matlab.double(x), matlab.double(y)
resultdict = eng.mymatlabfunc(xdata,ydata)

不幸的是,这并没有返回我的字典,而是一个我不知道如何处理的 matlab.object。是否可以返回我的字典,或者我应该简单地从 matlab 中返回数字并在 python 中制作我的字典?

【问题讨论】:

  • 从 m 端看,它只是一个“Python 对象”,因为 matlab 不支持字典。只需在其上调用get 之类的方法即可获得您想要的任何东西。
  • @Daniel 我收到一条错误消息,指出 matlab.object 没有属性“get”。 Python 仍然将其视为 matlab 对象,而不是字典。

标签: python matlab matlab-engine


【解决方案1】:

您可以执行 dir (resultdir) 以了解可用的方法。

【讨论】:

  • 我看到的唯一可用方法是大小和诸如“class”和“getattribute”之类的东西。我可以得到它的长度(长度 1),但就 python 而言,它是一个 matlab 对象,所以我不能用它进行正常的字典操作。
【解决方案2】:

我是从the mathworks website 发现的。只需为脚本的返回值创建一个 matlab 结构,python 就会将其视为字典。所以我的matlab代码现在是:

function out = mymatlabfunc(x,y)
    # compute stuff
    out = struct('interesting variable 1', x_out, 'interesting variable 2', y_out, ...);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 2020-05-22
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多