2016-04-14 75 views
1

我想從八度文件中讀取矩陣,但我無法找到解決方案。 輸入文件是:如何從八度文件讀取矩陣?

4 
1 4 2 3 
1 4 2 1 
4 2 1 4 
1 2 1 3 

其中4是行數和列數。我希望能夠將這些信息存儲在矩陣中,並能夠通過調用它們來使用它的元素,如a(2,3)

回答

0

您應該可以使用fscanf來讀取所有數據。然後,您可以提取第一個值以獲取行數和列數,然後將其餘數據重塑爲預期大小。

fid = fopen('data.dat', 'r'); 
data = fscanf(fid, '%f'); 
nRows = data(1); 

data = reshape(data(2:end), nRows, nRows).'; 

%// 1 4 2 3 
%// 1 4 2 1 
%// 4 2 1 4 
%// 1 2 1 3 

然後,您可以索引到結果,就像你與任何陣列

data(2,3) 
%// 2 
+0

你爲什麼想以二進制模式打開文件(fopen ...'rb')? – Andy

+0

@安迪只是習慣,真的。當使用'fscanf'或相關函數時,無論第二次輸入fopen如何,性能都是相同的。 – Suever

+0

好吧,至少第二個參數fopen是重要的,如果你想寫或追加到文件;-) – Andy

2

可以使用功能dlmread()

data = dlmread(file, sep, r0, c0)

閱讀矩陣數據從數據值之間使用分隔符sep的文本文件。

如果沒有定義sep字段之間的分隔符是從文件本身確定的。

給出兩個標量參數r0c0,它們定義了要讀取的數據的起始行和列。這些值從零開始索引,以便第一行對應於零索引。

所以,你可以簡單地使用一個班輪:

data = dlmread('input_file', ' ', 1, 0); 

通過調用函數與r0設置爲1,你跳過有效的第一線,其中包含了(現在沒用)號的行。