【发布时间】:2019-10-01 18:34:47
【问题描述】:
我在 MATLAB 算法中有一个函数,它使用函数 sum。如doc 中所述,该函数的输入必须是以下类型之一:
- 矢量
- 矩阵
- 多维数组
我知道 MATLAB 网站上有 functions 和 doc 可以转换这些数据类型。问题是我没有修改算法的权限,只有我发送它的权限。有没有办法在 python 中进行适当的更改,而不是在 MATLAB 中获取 python 数据来更改数据类型?
目前,我尝试将引擎中的 MATLAB 函数直接用于 python。我不确定转换是否正常。
这是我的问题的 MWE:
import matlab
import matlab.engine
myEngine = matlab.engine.start_matlab()
pythonData = ['1', '2', '3', '4', '5', '6', '7', '8', '9']
pythonData = myEngine.cellstr(pythonData)
print('after cellstr()', pythonData)
pythonData = myEngine.cell2mat(pythonData)
print('after cell2mat()', pythonData)
matlabSum = myEngine.sum(pythonData)
print('sum:', matlabSum)
这是我的terminal 的输出。
你会注意到 cellstr 没有做太多事情,这很奇怪。有没有人知道如何正确地进行这些转换?此外,总和不是 477。它应该是 45。我很确定这是因为它将它转换为 ASCII,这将导致 [49,50,51,...] 给出 477。
由于 matlab 自动将列表转换为单元格,我尝试更改整数的每个值,然后将 engine.cell2mat 直接用于列表,但出现此错误:
TypeError: array of MATLAB int64 type cannot be returned on this platform
到目前为止,我仍在尝试将 python 转换为上述 MATLAB 数据格式之一。我运行 Python 2.7。
【问题讨论】:
-
我没有收到 477 号码。这些值的总和是 45...?
-
在运行代码时?我向你保证,它的总和为 477。我将添加一个数字。我知道列表中数字的算术总和为 45...
-
我在编辑“应该是 45”之前看到了您的帖子,并且好像 预期的总和是 477(而不是 45)。
标签: python arrays matlab type-conversion