2011-09-20 79 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

相关问题