2014-07-01 50 views
2

我对Python非常新,我必须对工作中的现有项目进行一些更改。我正在将Matlab二进制数据文件的数据导入到我的Python脚本中。将pylab结构导入python

可以说,原来*.m文件包含了这样的事情:

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

(这是小例子,我可以提供)

我输入导致*.mat到使用

> mat = scipy.io.loadmat(filename.mat) 
的python脚本

之后,我可以通过使用

来访问我的matlab结构中的元素3210
> variableA = mat('temperature') 
> variableB = mat('vibrationSamples') 

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

为什么会发生这种情况。什么是干净的方式来解决它?我知道我可以使用

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

但是这看起来不合适。

我做错了什么?

+1

那怎么MATLAB卖场值是不是?它没有标量,只有数组。 –

+0

哦,我忘了提及,我在MATLAB中也是一个n00b。那么适当的解决方案是什么?正如我在问题中所描述的,索引为[0]的地址值?或者做像float()或其他的东西? –

回答

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 

使用isscalar函数来判断一个变量包含一个标值:

isscalar(A) 
ans = 
    1 
+0

很好的解释。正是我需要的。我只会补充说,对于整数和浮点数,铸造和使用索引进行寻址一样。例如,'float(mat ['Temperature'])'与mat ['Temperature'] [0] [0]'具有相同的结果。尽管如此,这不会为字符串工作 –