2011-06-16 69 views
4

我有一個4維字典,我用一個Python腳本爲我正在處理的數據挖掘項目製作了一個4維字典,並且我想將數據讀入Matlab以對數據進行一些統計測試。matlab需要什麼格式的n維數據輸入?

閱讀2維矩陣是微不足道的。我認爲,由於我的第一維尺寸只有四層,因此我可以將每個切片寫入一個單獨的文件(總共4個文件),每個文件具有多個二維切片,如下所示:

2 3 6 
4 5 8 

6 7 3 
1 4 3 

6 6 7 
8 9 0 

然而,這不起作用,並且matlab將其讀取爲單個連續的6 x 3矩陣。我甚至看了一下dlmread,但無法弄清楚如何讓它做我想做的事。我該如何格式化,以便可以將3個(或更多)尺寸放在一個文件中?

回答

7

一個簡單的解決方案是創建一個只有兩行的文件:第一行包含目標數組大小,第二行包含所有數據。那麼,你需要做的就是重塑數據。

說你的文件是

3 2 3 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 

你下面的陣列讀入變量data

fid = fopen('myFile'); %# open the file (don't forget the extension) 
arraySize = str2num(fgetl(fid)); %# read the first line, convert to numbers 
data = str2num(fgetl(fid)); %# read the second line 
data = reshape(data,arraySize); %# reshape the data 
fclose(fid); %# close the file 

看一看data看到多維數組如何Matlab的訂單元素。

+0

優秀的解決方案,我衷心批准。非常感謝你。 – 2011-06-16 04:32:15

2

Matlab以明智的方式存儲數據列。因此,從你的例子(假設它是一個3x2x3矩陣),matlab將把它存儲爲第一個「slice」的第一,第二和第三列,然後是第二個slice的第一個,第二個第三列,依次類推,如下所示

2 
4 
3 
5 
6 
8 
6 
1 
7 
4 
3 
3 
6 
8 
6 
9 
7 
0 

所以你可以像這樣從python中寫出數據(我不知道如何),然後將它讀入matlab中。然後,您可以將其重新轉換爲3x2x3矩陣,並保留正確的順序。

+0

擊敗我秒。 – 2011-06-16 04:21:43

+0

這就是那裏......我現在看到如何做到這一點,但它需要我弄清楚我的每個維度是多麼深的手動(從執行到執行)。有沒有將這些信息直接編碼到輸入文件的方法? – 2011-06-16 04:24:54

+0

您可以將其寫入帶有標題的自定義文件,並在其中存儲信息。簡單的例如,在這種情況下文件的第一行將是3(對於3維),接下來的3行將分別是3,2和3。所以,當你閱讀matlab時,你讀了第一行,然後閱讀下一個很多行。這會告訴你到底有多少行/列/尺寸。讀完這些之後,直到文件的最後,然後重新使用這個信息 – 2011-06-16 04:31:25