比较Matlab和Python变量

时间:2015-01-31 10:58:20

标签: python matlab

我正在进行一项任务,我将.m文件转换为.py。但是为了测试代码,我必须在一些日志文件中转储或记录Python和Matlab的每个变量的值。

然后我使用其列属性在Excel工作表中打开它们之后进行比较。就像数组索引一样 - 每个索引/列行值是什么等等。这非常令人厌烦,我不知道如何以编程方式比较特定变量的变量/语句输出,因为它只是一个.m到.py转换。

1 个答案:

答案 0 :(得分:0)

您可以在Matlab中运行程序并使用save命令保存所有变量。这将保存到.mat文件。然后你可以使用scipy.io.loadmat将该文件中的变量加载到python中,并在python中进行比较。

首先,在matlab中:

save 'data.mat' var1 var2 var3  

然后在python中(在同一目录中,或提供完整路径):

import scipy.io
vars = scipy.io.loadmat('data.mat', squeeze_me=True)
var1_matlab = vars['var1']
var2_matlab = vars['var2']
var3_matlab = vars['var3']

请注意,numpy有1D数组,而Matlab没有(Matlab中的1D数组实际上是2D数组,其中一个维度的长度为1)。这可能意味着变量的python和scipy版本中的维数不同。 squeeze_me通过消除长度为1的维度来解决这个问题,但是例如,它可能会从Matlab中获取一个2D数组,恰好在某个维度上只有1的长度并将其压缩到1D python数组。所以你可能不得不做一些手动尺寸匹配。

要使其正常工作,请确保将matlab配置为在" MATLAB版本5或更高版本中保存文件"但是文件格式(在2014B中,这是preferences> General> MAT-Files)。

如果您绝对必须使用版本7文件,则可以尝试hdf5storage,表示它支持它们。但是,你可能已经安装了scipy,我个人使用了scipy方法并确认它有效,但是没有用hdf5storage做同样的事情。