Main Content

matfile

파일을 메모리로 불러오지 않고 MAT 파일에 있는 변수에 액세스 및 변경

설명

MAT 파일 객체를 사용하면 파일을 메모리로 불러오지 않고 MAT 파일에 있는 변수에 액세스하고 변경할 수 있습니다. 변수의 일부를 불러오거나 저장할 수 있습니다. MAT 파일 객체를 사용하여 변수를 부분적으로 불러오고 저장하면 loadsave 명령을 사용할 때보다 필요한 메모리가 적습니다.

생성

설명

예제

matObj = matfile(filename)filename으로 지정된 MAT 파일에 연결되는 matlab.io.MatFile 객체를 생성합니다.

이 MAT 파일 객체를 사용하면 변수를 메모리로 불러올 필요 없이 MAT 파일에 있는 변수에 직접 액세스하고 변경할 수 있습니다.

예제

matObj = matfile(filename,'Writable',isWritable)은 파일에 대한 쓰기 액세스를 활성화하거나 비활성화합니다. isWritabletrue 또는 false로 지정합니다.

입력 인수

모두 확장

MAT 파일의 이름으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다.

  • filename은 전체 경로나 부분 경로를 포함할 수 있습니다. 경로가 없는 경우 matfile은 MATLAB® 검색 경로에서 파일을 검색합니다.

  • filename에 확장자가 포함되어 있지 않으면 matfile의 끝에 .mat가 추가됩니다.

  • 파일이 존재하지 않는 경우 matfile은 변수 값이 최초로 대입될 때 버전 7.3 MAT 파일을 만듭니다.

쓰기 권한 활성화로, true 또는 false로 지정됩니다. 디폴트 값은 새 파일의 경우 true이고, 기존 파일의 경우 false입니다.

  • true — MAT 파일 객체에서 MAT 파일에 대한 쓰기 권한을 활성화합니다. 파일이 읽기 전용인 경우 fileattrib 함수를 사용하여 시스템 권한을 변경하십시오.

  • false — MAT 파일 객체에서 MAT 파일에 대한 쓰기 권한을 비활성화합니다.

속성

모두 확장

MAT 파일 객체 속성에 액세스

구문 ObjectName.Properties.PropertyName을 사용하여 MAT 파일 객체 속성에 액세스합니다. 여기서 PropertyName은 속성 이름입니다. 예를 들어 구문 mObj.Properties.Source를 사용하여 MAT 파일 객체 mObj에 연결된 MAT 파일의 소스 파일 경로에 액세스할 수 있습니다.

파일 경로로, MAT 파일의 정규화된 경로를 포함한 문자형 벡터로 반환됩니다.

MAT 파일 객체의 쓰기 권한 상태로, true 또는 false로 반환됩니다.

  • true — MAT 파일 객체에 MAT 파일에 대한 쓰기 권한이 있습니다.

  • false — MAT 파일 객체에 MAT 파일에 대한 읽기 전용 권한이 있습니다.

객체 함수

size

MAT 파일에 있는 변수의 배열 차원 가져오기

allDims = size(matObj,variable)matObj에 대응되는 파일에서 지정된 변수의 각 차원의 크기를 반환합니다. 출력값 allDims1×m 벡터이며, 여기서 m = ndims(variable)입니다.

[dim1,...,dimN] = size(matObj,variable)은 별도의 출력 변수 dim1,...,dimN으로 각 차원의 크기를 반환합니다.

selectedDim = size(matObj,variable,dim)은 지정된 차원의 크기를 반환합니다.

참고: 구문 size(matObj.variable)size를 호출하지 마십시오. 이 구문은 변수의 전체 내용을 메모리로 불러옵니다. 매우 큰 변수의 경우, 이 불러오기 작업을 수행하면 Out of Memory 오류가 발생합니다.

who

MAT 파일에 있는 변수 목록 가져오기

varlist = who(matObj)matObj와 연결된 MAT 파일의 모든 변수를 사전순으로 나열합니다. 선택적으로, 목록을 셀형 배열 varlist로 반환합니다.

varlist = who(matObj,variables)는 지정된 변수를 나열합니다.

whos

크기와 유형을 포함하여, MAT 파일에 있는 변수의 목록 가져오기

details = whos(matObj)matObj와 연결된 MAT 파일의 모든 변수에 대한 정보를 반환합니다.

details = whos(matObj,VarName1,...,VarNameN)은 지정된 변수에 대한 정보를 반환합니다.

예제

모두 축소

파일에 대한 MAT 파일 객체를 만듭니다. matfile 함수는 MAT 파일에 대응하는 matlab.io.MatFile 객체를 생성합니다.

matObj = matfile('myFile.mat')

객체를 생성할 때 MAT 파일 myFile.mat에 대한 쓰기 권한을 활성화합니다.

m = matfile('myFile.mat','Writable',true);

또는 MAT 파일 객체를 생성한 후에 Writable 속성을 설정하여 쓰기 권한을 활성화할 수도 있습니다.

m.Properties.Writable = true;

샘플 MAT 파일 topography.mat를 엽니다. MAT 파일 객체를 사용하여 파일에서 변수 topo를 읽어옵니다. MATLAB®은 전체 변수 topo를 작업 공간으로 불러옵니다.

m = matfile('topography.mat');
topo = m.topo;

배열이 포함된 MAT 파일을 만든 다음, MAT 파일 객체를 사용해 다른 배열을 파일에 추가합니다.

20×20 배열 x를 생성하고 myFile.mat에 저장하여 MAT 파일을 만듭니다.

x = magic(20);
save('myFile.mat','x');

기존 MAT 파일에 연결된 MAT 파일 객체를 만듭니다. Writabletrue로 설정하여 쓰기 권한을 활성화합니다.

m = matfile('myFile.mat','Writable',true);

다른 15×15 배열 y를 생성합니다. MAT 파일 객체를 사용하여 y를 MAT 파일에 저장합니다. 구조체형 배열의 필드에 액세스하는 것과 마찬가지로, 점 표기법을 사용하여 MAT 파일에 변수를 지정합니다. MATLAB®이 변수 y를 파일에 추가합니다.

y = magic(15);
m.y = y;

MAT 파일 myFile.mat에 저장된 모든 변수를 표시합니다.

whos('-file','myFile.mat')
  Name       Size            Bytes  Class     Attributes

  x         20x20             3200  double              
  y         15x15             1800  double              

MAT 파일 객체를 사용하여 MAT 파일에 있는 변수의 특정 부분에 액세스합니다. 예를 들어 MAT 파일에서 변수의 일부에 데이터를 저장하거나 변수의 일부를 MATLAB® 작업 공간으로 읽어 들일 수 있습니다.

MAT 파일 객체를 사용하여 myFile2.mat 파일에서 변수 y의 일부에 데이터를 저장합니다. 먼저 MAT 파일 객체 m을 만듭니다.

m = matfile('myFile2.mat');

다음으로, 배열을 만들어 변수 y의 일부에 저장합니다. 구조체형 배열의 필드에 액세스하는 것과 마찬가지로, 점 표기법을 사용하여 MAT 파일에 변수를 지정합니다. MATLAB®이 20×20 배열을 인덱스 (81:100,81:100)으로 지정된 y의 요소에 삽입합니다.

m.y(81:100,81:100) = magic(20);

배열 y의 서브셋을 새 작업 공간 변수 z로 읽어옵니다. MATLAB®이 MAT 파일에서 인덱스 (85:94,85:94)로 지정된 10×10 부분배열을 작업 공간 변수 z로 읽어옵니다.

z = m.y(85:94,85:94);

변수의 크기를 확인한 다음 각 열의 평균을 계산합니다.

예제 MAT 파일 stocks.mat를 엽니다.

filename = 'stocks.mat';
m = matfile(filename);

stocks.mat에서 변수 stocks의 크기를 확인합니다.

[nrows,ncols] = size(m,'stocks');

변수 stocks의 각 열에 대한 평균을 계산합니다.

avgs = zeros(1,ncols);
for i = 1:ncols
    avgs(i) = mean(m.stocks(:,i));
end

MAT 파일에서 변수의 크기를 변경합니다.

변수를 만든 다음 MAT 파일에 저장합니다.

x = magic(20);
save myFile.mat x
whos -file myFile.mat
  Name       Size            Bytes  Class     Attributes

  x         20x20             3200  double              

MAT 파일을 열고 변수 크기를 조정합니다.

m = matfile("myFile.mat",Writable=true);
m.x = magic(30);
whos -file myFile.mat
  Name       Size            Bytes  Class     Attributes

  x         30x30             7200  double              

변수 크기를 다시 조정합니다. 이번에는 원래 크기보다 더 작게 만듭니다.

m.x = magic(10);
whos -file myFile.mat
  Name       Size            Bytes  Class     Attributes

  x         10x10              800  double              

제한 사항

  • 인덱싱을 사용하여 MAT 파일에 있는 변수의 일부에 액세스할 경우 다음 사항을 참고하십시오.

    • 선형 인덱싱은 지원되지 않습니다. 따라서 모든 차원에 대해 인덱스를 지정해야 합니다.

    • 실수형 배열의 인덱싱된 부분에 복소수 값을 할당하는 기능은 지원되지 않습니다.

  • MAT 파일에 있는 희소 배열의 경우 MAT 파일 객체의 특징은 다음과 같습니다.

    • 인덱싱을 사용하여 희소 배열의 일부를 읽을 수 있습니다.

    • 인덱싱을 사용하여 희소 배열의 일부에 쓰는 기능(값 할당)은 지원하지 않습니다.

  • MAT 파일 객체는 다음에 대한 요소 참조를 지원하지 않습니다.

    • 테이블의 변수

    • 셀형 배열의 셀

    • string형 배열

    • datetime형 배열

    • duration형 배열

    • 구조체형 배열의 필드

    • 사용자 정의 클래스

  • MAT 파일 객체는 m 출력값을 사용한 함수 핸들 실행을 지원하지 않습니다. 예를 들어, MAT 파일에 함수 핸들 myfunc가 포함된 경우 구문 m.myfunc()는 함수 핸들로의 요소를 참조하려 시도하지만 함수를 불러오지는 않습니다.

  • 핸들 객체를 저장하면 MATLAB은 핸들의 복사본이 아니라 객체의 복사본을 저장합니다. 따라서 객체가 저장된 작업 공간에서 핸들을 통해 객체를 수정해도 저장된 핸들 객체는 수정되지 않습니다.

  • 효율적인 부분 불러오기 및 저장을 수행하려면 버전 7.3 MAT 파일이 필요합니다. 버전 7.3 MAT 파일을 만들려면 save 함수를 '-v7.3' 옵션과 함께 호출하십시오. 예를 들어, 기존 MAT 파일 durer.mat를 버전 7.3으로 변환하려면 다음을 호출하십시오.

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

  • 인덱스의 일부로 end 키워드를 사용하면 MATLAB이 전체 변수를 메모리로 불러오게 됩니다. 매우 큰 변수의 경우, 이 불러오기 작업을 수행하면 Out of Memory 오류가 발생합니다. end를 사용하는 대신 size 메서드를 사용하여 변수의 크기를 확인하십시오.

    sizeMyVar = size(matObj,'myVar')

버전 내역

R2011b에 개발됨

참고 항목

|

도움말 항목