2011-09-20 3 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
012 3,516,43.091 18.43 -16.582
-17.457 18.497 44.327 16.695
-17.627
39.364 17.548 44.24 -18.604

-16.416 20.436 44.281 17.984
-16.918
44.441 14.703 40.697 -17.17
17.078 44.22 -18.111
14.941 39.53 -16.27
18 -18.281 19.582 39.937 16.322
-16.342 38.961
. 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])'; 

내가 추가해야합니다 당신은이 데이터 파일이 아마 당신은 하나의 파일 당 매트릭스 또는 매트랩 매트 파일 하나에 자신의 형식을 변경하는 생각해야 만드는 방법에 대한 제어가있는 경우.

+0

도움 주셔서 감사합니다. 몇 가지 파일을 만드는 옵션을 생각하고 있었지만 최적화 알고리즘을 위해 루프에서이 행렬을 사용하고 있기 때문에 여러 파일을 만들고이를 읽으면 런타임이 늘어날 수 있다고 생각했습니다. 하지만 Matlab 매트 파일을 봐야합니다. 다시 한 번 감사드립니다. – Reyhaneh

관련 문제