2014-07-01 49 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]'具有相同的結果。儘管如此,這不會爲字符串工作 –