Main Content

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');

배열에 데이터가 채워져 있으므로 이제 이전보다 파일 크기가 커졌습니다.

참고 항목

관련 항목