将Matlab结构导入Python
我刚接触 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