将matlab结构导入python

时间:2014-07-01 09:49:02

标签: python arrays matlab numpy

我是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')

但是我对结果感到困惑。如果我尝试打印varialbeA,对于给定的示例,它将提供二维数组。 print variableA的输出为[[61.3]]。在*.m文件中,它显然是float

为什么会这样。什么是解决它的干净方法?我知道我可以使用

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

但这看起来不合适。

我做错了吗?

1 个答案:

答案 0 :(得分: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中表示为a   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
     

使用isscalar函数判断变量是否包含标量值:

isscalar(A)
ans =
    1