将Matlab结构导入Python

2 投票
1 回答
952 浏览
提问于 2025-04-18 11:42

我刚接触 Python,现在需要对工作中的一个现有项目做一些修改。我正在把 Matlab 的二进制数据文件里的数据导入到我的 Python 脚本中。

假设原始的 *.m 文件里包含这样的内容:

> Temperature=61.3
> 
> VibrationSamples=[76,75,76,77, ... a lot of samples, 78]
>
> save(filename.mat, 'Temperature', 'VibrationSamples', '-mat7-binary')

(这是我能提供的最简单的例子)

我通过以下方式将生成的 *.mat 文件导入到 Python 脚本中:

> mat = scipy.io.loadmat(filename.mat)

之后,我可以通过以下方式访问 Matlab 结构中的元素:

> variableA = mat('temperature')
> variableB = mat('vibrationSamples')

不过我对结果有点困惑。如果我尝试打印变量 variableA,在这个例子中,它会显示为一个二维数组。执行 print variableA 的输出是 [[61.3]]。而在 *.m 文件中,它明显是一个 float 类型。

为什么会这样呢?有什么好的方法来解决这个问题吗?我知道我可以直接使用:

> variableA = mat('temperature')[0][0]

但这样看起来不太合适。

我是不是做错了什么?

1 个回答

3

这就是MATLAB存储标量(单个数值)的方法。在MATLAB的数据模型中,标量被表示为1行1列的数组。

所以在Python中,你可以这样提取这个数值:

mat['Temperature'][0,0]

关于MATLAB这方面的更多信息,可以在这里找到: http://www.mathworks.co.uk/help/matlab/math/empty-matrices-scalars-and-vectors.html#f1-86433

标量

在MATLAB中,任何单独的实数或复数都被表示为一个1行1列的矩阵,这个矩阵叫做标量值:

A = 5;

ndims(A)        % Check number of dimensions in A
ans =
     2

size(A)         % Check value of row and column dimensions
ans =
     1     1

可以使用iscale函数来判断一个变量是否是标量值:

isscalar(A)
ans =
    1

撰写回答