2011-09-20 81 views
0

我想讀取一個文本文件,其中包含幾個矩陣的數據並將它們加載到matlab中的不同矩陣中。我的文本文件的例子是這樣的:使用矩陣分隔符從文本文件加載數據

19.623 -15.67 42.995
17.942 -10.923 47.112
23.806 -14.332 49.912
21.582 -11.218 46.203
18.031 -12.567 44.381
15.931 -18.897 39.046
18.497 -17.457 44.327

17.548 -18.604 44.24
15.931 -18.897 39.046
18.43 -16.582 43.091
18.497 -17.457 44.327
16.695 -17.627 39.364
17.548 -18.604 44.24

20.436 -16.416 44.281
17.984 -16.918 44.441
14.703 -17.17 40.697
17.078 -18.111 44​​.22
16.322 -16.342 38.961
19.582 -18.281 39.937
14.941 -16.27 39.53
18。 43 -16.582 43.091

該文件表示三個矩陣,其中第一,第二和第三矩陣的維度分別爲7x3,6x3和8x3。矩陣使用新行分隔。我嘗試過使用S = LOAD(FILENAME)命令,但是這個命令創建了一個21x3的矩陣,它是所有行的連接。如何爲我的矩陣定義一個矩陣分隔符(分隔符),以便根據我的文件的不同片段生成不同的矩陣?請注意,所有列的數量始終爲3.

感謝百萬人的幫助。對此,我真的非常感激。

回答

2

如果您的數據中沒有NaN值,則可以使用textscan\n分隔符。它會在讀取空行時生成NaN值。不是很優雅,但它有訣竅。我相信還有很多其他方法可以做到這一點。

fid=fopen('data','r'); 
data=textscan(fid,'%f','delimiter','\n'); 
fclose(fid); 
data=cell2mat(data); 
index=find(isnan(data)); 
A=data(1:index(1)-1); 
B=data(index(1)+1:index(2)-1); 
C=data(index(2)+1:end); 
A=reshape(A,[3 length(A)/3])'; 
B=reshape(B,[3 length(B)/3])'; 
C=reshape(C,[3 length(C)/3])'; 

我必須補充一點,如果你有過如何將這些數據文件被創建,你可能應該考慮改變自己的格式,以每個文件任何一個矩陣或一個Matlab墊文件的任何控制。

+0

感謝您的幫助。我正在考慮創建幾個文件的選項,但由於我正在使用這些矩陣循環優化算法,我認爲創建幾個文件並閱讀它們可以增加運行時間。但是,我必須看看Matlab mat文件。再次感謝。 – Reyhaneh

相關問題