주요 콘텐츠

MAT 파일에서 변수의 일부를 저장 및 불러오기

matfile 함수를 사용하여 변수의 일부를 메모리로 불러오지 않고 MAT 파일에서 직접 저장하고 불러올 수 있습니다. load 함수 또는 save 함수 대신 matfile 함수를 사용하는 방법의 주요 이점은 메모리에 담을 수 없을 정도로 매우 큰 데이터 세트의 일부를 처리할 수 있다는 것입니다. 이렇게 큰 변수를 사용할 경우, 한 번에 최대한 많은 데이터를 읽어 메모리에 기록하십시오. 그러지 않으면, 반복된 파일 액세스로 인해 코드의 성능이 저하될 수 있습니다.

matfile 함수를 사용하여 저장 및 불러오기

이 예제에서는 matfile 함수를 사용하여 기존 MAT 파일에서 변수의 일부를 불러오고 수정하고 저장하는 방법을 보여줍니다.

두 개의 변수 AB가 있는 버전 7.3 MAT 파일을 만듭니다.

A = rand(5);
B = magic(10);
save example.mat A B -v7.3;
clear A B

MAT 파일 example.mat에서 MatFile 객체를 생성합니다. matfile 함수는 MAT 파일에 대응하며 MatFile 객체의 속성을 포함하는 MatFile 객체를 생성합니다. 기본적으로, matfile은 기존 MAT 파일에서 불러오기만 허용합니다.

exampleObject = matfile('example.mat');

저장할 수 있도록 하려면 Writable 파라미터와 함께 matfile을 호출하십시오.

exampleObject = matfile('example.mat','Writable',true);

또는 별도의 단계에서 객체를 생성하고 Properties.Writable을 설정할 수도 있습니다.

exampleObject = matfile('example.mat');
exampleObject.Properties.Writable = true;

example.mat에서 B의 첫 번째 행을 변수 firstRowB로 불러온 후 데이터를 수정합니다. 버전 7.3 MAT 파일과 연결된 객체의 요소를 참조하면 MATLAB®은 사용자가 지정하는 변수의 일부만 불러옵니다.

firstRowB = exampleObject.B(1,:); 
firstRowB = 2 * firstRowB;

firstRowB에 저장된 값을 사용하여 example.mat에서 변수 B의 첫 번째 행에 있는 값을 업데이트합니다.

exampleObject.B(1,:) = firstRowB;

매우 큰 파일의 경우, 가장 좋은 접근 방식은 한 번에 최대한 많은 데이터를 읽어 메모리에 기록하는 것입니다. 그러지 않으면, 반복된 파일 액세스로 인해 코드의 성능이 저하됩니다. 예를 들어, 파일에 많은 행과 열이 있으며 하나의 행을 불러오는 데 사용 가능한 메모리의 대부분이 소요된다고 가정하겠습니다. 한 번에 요소를 하나씩 업데이트하는 대신, 각각의 행을 업데이트하십시오.

[nrowsB,ncolsB] = size(exampleObject,'B');
for row = 1:nrowsB
  exampleObject.B(row,:) = row * exampleObject.B(row,:);
end

메모리가 문제가 되지 않는다면, 변수 전체를 한 번에 업데이트할 수 있습니다.

exampleObject.B = 10 * exampleObject.B;

또는 save 함수를 -append 옵션과 함께 호출하여 변수를 업데이트합니다. -append 옵션은 save 함수가 지정된 변수 B만 바꾸고 파일 내 다른 변수는 그대로 유지하도록 요청합니다. 이 방법에서는 항상 전체 변수를 불러오고 저장해야 합니다.

load('example.mat','B');
B(1,:) = 2 * B(1,:);
save('example.mat','-append','B');

matlab.io.MatFile 객체를 사용하여 파일에 변수를 추가합니다.

exampleObject.C = magic(8);

save 함수를 -append 옵션과 함께 호출하여 변수를 추가할 수도 있습니다.

C = magic(8);
save('example.mat','-append','C');
clear C

변수의 일부를 동적으로 불러오기

이 예제에서는 MAT 파일에서 변수의 일부에 동적으로 액세스하는 방법을 보여줍니다. 이 기법은 변수 이름을 모두 알 수는 없는 MAT 파일을 사용할 때 유용합니다.

샘플 파일 topography.mat에 대응하는 MatFile 객체를 생성합니다. who 함수를 사용하여 셀형 배열 varlist에 파일의 변수 이름을 저장합니다.

exampleObject = matfile("topography.mat");
varlist = who(exampleObject)
varlist = 3×1 cell
    {'topo'    }
    {'topomap1'}
    {'topomap2'}

두 번째 변수와 세 번째 변수인 topomap1topomap2는 둘 다 컬러맵 데이터가 포함된 3열 행렬입니다. 이 두 변수 각각의 세 번째 열에 있는 컬러맵 데이터를 구조체 S의 필드로 불러옵니다. 각 필드에 대해, 원래 변수 이름 앞에 "colormap_"가 추가된 필드 이름을 지정합니다. 그런 다음 exampleObject의 속성으로 각 변수의 데이터에 액세스합니다. varName은 변수이므로 괄호로 묶습니다.

for index = 2:3
    varName = varlist{index};
    S.("colormap_"+varName) = exampleObject.(varName)(:,3);
end

구조체의 내용을 확인합니다. 구조체에는 각각 열 벡터가 포함된 두 개의 필드 colormap_topomap1colormap_topomap2가 있습니다.

S
S = struct with fields:
    colormap_topomap1: [64×1 double]
    colormap_topomap2: [128×1 double]

실수로 전체 변수를 불러오지 않도록 방지하기

MAT 파일에 있는 큰 변수의 크기를 모르는 상태에서 한 번에 이 변수의 일부만을 불러오려는 경우 end 키워드를 사용하지 마십시오. end 키워드를 사용하면 해당 변수의 전체 내용을 메모리에 일시적으로 불러오기 때문입니다. 너무 큰 변수를 불러오면 시간이 오래 걸리거나 메모리 부족(Out of Memory) 오류가 생성됩니다. 대신, MatFile 객체에 대해 size 메서드를 호출하십시오.

예를 들어, 다음 코드는 B의 전체 내용을 일시적으로 메모리에 불러옵니다.

lastColB = exampleObject.B(:,end);

성능을 높이려면 대신 다음 코드를 사용하십시오.

[nrows,ncols] = size(exampleObject,'B');
lastColB = exampleObject.B(:,ncols);

마찬가지로, exampleObject.B와 같이 matObj.varName 형식의 구문으로 변수를 참조할 때마다 MATLAB®은 전체 변수를 일시적으로 메모리로 불러옵니다. 따라서 다음과 같은 구문을 사용하여 MatFile 객체에 대해 size 메서드를 호출하도록 하십시오.

[nrows,ncols] = size(exampleObject,'B');

다음과 같이 exampleObject.B의 전체 내용을 size 함수로 전달하지 마십시오.

[nrows,ncols] = size(exampleObject.B);

구문의 차이는 미묘하지만 그 결과는 확연히 다릅니다.

부분 불러오기 및 저장을 하려면 버전 7.3 MAT 파일이 요구됨

버전 7 이하의 MAT 파일과 연결된 MatFile 객체를 사용하는 불러오기 작업이나 저장 작업을 수행하면 전체 변수를 일시적으로 메모리로 불러옵니다.

버전 7.3 형식의 파일을 생성하려면 matfile 함수를 사용하십시오. 예를 들어, 다음 코드는 부분 불러오기 및 저장을 지원하는 MAT 파일을 생성합니다.

newfile = matfile('newfile.mat');

그러나 기본적으로 save 함수는 버전 7 MAT 파일을 생성합니다. 다음과 같이 save 함수를 -v7.3 옵션과 함께 호출하여 기존의 MAT 파일을 버전 7.3으로 변환할 수 있습니다.

load('durer.mat');
save('mycopy_durer.mat','-v7.3');

새 파일을 버전 7.3 형식으로 저장하도록 설정을 변경하려면 탭으로 이동하여 환경 섹션에서 설정을 클릭합니다. MATLAB > 일반 > MAT 파일 및 FIG 파일을 선택한 다음 사용 가능한 옵션 중에서 선택합니다.

참고 항목

| |

도움말 항목