matfile
함수를 사용하여 배열 확장하기
MAT 파일에 큰 값을 여러 개 쓸 경우 파일 크기가 비증분 방식으로 증가합니다. 이 증가 방식은 정상입니다. 그러나 파일에 필요한 확장 횟수를 최소화하여 성능을 최적화하려면 배열을 데이터로 채우기 전에 배열에 초기값을 할당하십시오.
예를 들어, 쓰기 가능한 MatFile
객체가 있다고 가정하겠습니다.
fileName = 'matFileOfDoubles.mat';
matObj = matfile(fileName);
matObj.Properties.Writable = true;
쓰려는 값의 파라미터를 정의합니다. 이 경우에는 한 번에 5만 개씩, 백만 개의 값을 씁니다. 값은 평균이 123.4이고 표준편차가 56.7입니다.
size = 1000000; chunk = 50000; mean = 123.4; std = 56.7;
배열을 데이터로 채우기 전에 배열의 마지막 요소에 초기값 0을 할당합니다.
matObj.data(1,size) = 0;
파일의 크기를 확인합니다.
Windows® 시스템에서는
dir
을 사용합니다.system('dir matFileOfDoubles.mat');
UNIX® 시스템에서는
ls -ls
를 사용합니다.system('ls -ls matFileOfDoubles.mat');
이 경우 matFileOfDoubles.mat
는 5000바이트 미만입니다. 배열의 마지막 요소에 초기값을 할당하면 큰 파일이 생성되지 않습니다. 그러나 matFileOfDoubles.mat
크기가 크게 증가할 경우에 대비할 수 있도록 시스템을 준비합니다.
한 번에 청크 하나씩, 데이터를 배열에 씁니다.
nout = 0; while(nout < size) fprintf('Writing %d of %d\n',nout,size); chunkSize = min(chunk,size-nout); data = mean + std * randn(1,chunkSize); matObj.data(1,(nout+1):(nout+chunkSize)) = data; nout = nout + chunkSize; end
파일의 크기를 확인합니다.
system('dir matFileOfDoubles.mat');
배열에 데이터가 채워져 있으므로 이제 이전보다 파일 크기가 커졌습니다.