我想從八度文件中讀取矩陣,但我無法找到解決方案。 輸入文件是:如何從八度文件讀取矩陣?
4
1 4 2 3
1 4 2 1
4 2 1 4
1 2 1 3
其中4是行數和列數。我希望能夠將這些信息存儲在矩陣中,並能夠通過調用它們來使用它的元素,如a(2,3)
。
我想從八度文件中讀取矩陣,但我無法找到解決方案。 輸入文件是:如何從八度文件讀取矩陣?
4
1 4 2 3
1 4 2 1
4 2 1 4
1 2 1 3
其中4是行數和列數。我希望能夠將這些信息存儲在矩陣中,並能夠通過調用它們來使用它的元素,如a(2,3)
。
您應該可以使用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
可以使用功能dlmread()
:
data = dlmread(file, sep, r0, c0)
閱讀矩陣數據從數據值之間使用分隔符
sep
的文本文件。如果沒有定義
sep
字段之間的分隔符是從文件本身確定的。給出兩個標量參數
r0
和c0
,它們定義了要讀取的數據的起始行和列。這些值從零開始索引,以便第一行對應於零索引。
所以,你可以簡單地使用一個班輪:
data = dlmread('input_file', ' ', 1, 0);
通過調用函數與r0
設置爲1
,你跳過有效的第一線,其中包含了(現在沒用)號的行。
你爲什麼想以二進制模式打開文件(fopen ...'rb')? – Andy
@安迪只是習慣,真的。當使用'fscanf'或相關函數時,無論第二次輸入fopen如何,性能都是相同的。 – Suever
好吧,至少第二個參數fopen是重要的,如果你想寫或追加到文件;-) – Andy