如何使用matlab.engine在Matlab和python之间传递变量

时间:2015-08-18 14:21:33

标签: python matlab

我有一个python代码,我希望在其中使用Matlab函数操作列表并将其作为新列表返回给python。

为了测试expect,我尝试了以下内容:

matlab.engine

import matlab.engine eng = matlab.engine.start_matlab() eng.cd('~/Documents/someDirWithMatlabFunctions/') a = testFnc(2) 看起来像

testFnc.m

当我运行python代码时,我得到以下输出:

function [list2] = testFnc(list)
for i = 1:numel(list)
    list(i) = 3*list(i)
end
list2 = list;
end

我的第一个问题是>>> a = eng.testFnc(4) >>> a 12L >>> print a 12 是什么?此外,当我尝试将列表作为参数传递时:

12L

然后引用Matlab函数的行,其中发生乘法,如错误发生的位置。 我曾预料到这可能是一个问题,因为列表和矩阵是不同的东西。如何在Matlab中正确传递变量?

1 个答案:

答案 0 :(得分:3)

什么是12L?

Python支持任意精度整数,这意味着您能够表示比普通32位或64位整数类型更大的数字。 L告诉您何时文字属于此类型而不是常规整数。

注意,L仅出现在解释器输出中,它只是表示类型。这就是为什么它在打印时不显示的原因。

如何在Matlab中正确传递变量?

直接来自MathWorks documentation

  

matlab Python包提供了数组类来表示MATLAB数值类型的数组作为Python变量,以便MATLAB数组可以在Python和MATLAB之间传递。

The documentation goes on to give lots of helpful examples关于如何从MATLAB传递变量。

要将数据传回MATLAB,我建议使用numpy / scipy。 This answer explains more about how to do that.