Main Content

matfile

MAT ファイルをメモリに読み込まずに、そのファイル内の変数にアクセスして変更

説明

MAT ファイル オブジェクトを使用して、メモリに読み込まずに MAT ファイル内の変数にアクセスして変更します。一部の変数の読み込みと保存ができます。MAT ファイル オブジェクトを使用した変数の部分的な読み込みおよび保存では、必要なメモリが load コマンドおよび save コマンドより少なくなります。

作成

説明

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 は、変数に対する最初の割り当て後に、Version 7.3 の MAT ファイルを作成します。

書き込みアクセスの有効化。true または false として指定します。既定値は、新しいファイルの場合は true、既存のファイルの場合は false です。

  • true — MAT ファイル オブジェクトから MAT ファイルへの書き込みアクセスを有効にします。そのファイルが読み取り専用の場合、関数 fileattrib を使用してシステム権限を変更します。

  • false — MAT ファイル オブジェクトから MAT ファイルへの書き込みアクセスを無効にします。

プロパティ

すべて展開する

MAT ファイル オブジェクトのプロパティへのアクセス

MAT ファイル オブジェクトのプロパティにアクセスするには、構文 ObjectName.Properties.PropertyName を使用します。ここで、PropertyName はプロパティの名前です。たとえば、構文 mObj.Properties.Source を使用して、MAT ファイル オブジェクト mObj に関連付けられた MAT ファイルのソース ファイル パスにアクセスできます。

ファイル パス。MAT ファイルへの完全修飾パスを含む文字ベクトルとして返されます。

MAT ファイル オブジェクトの書き込みアクセスのステータス。true または false のいずれかとして返されます。

  • true — MAT ファイル オブジェクトに MAT ファイルへの書き込みアクセスが付与されています。

  • false — MAT ファイル オブジェクトに MAT ファイルへの読み取り専用アクセスが付与されています。

オブジェクト関数

size

MAT ファイル内の変数の配列次元を取得

allDims = size(matObj,variable) は、matObj に対応するファイル内の指定された変数の各次元のサイズを返します。出力 allDims は、1m 列 (m = ndims(variable)) のベクトルです。

[dim1,...,dimN] = size(matObj,variable) は、各次元のサイズを個々の出力変数 dim1,...,dimN に返します。

selectedDim = size(matObj,variable,dim) は、指定された次元のサイズを返します。

メモ: size を呼び出すときに、構文 size(matObj.variable) を使用しないでください。この構文は、変数の内容全体をメモリに読み込みます。非常に大きい変数の場合、この読み込み操作によって Out of Memory エラーが発生します。

who

MAT ファイル内の変数のリストを取得

varlist = who(matObj) は、matObj に関連付けられている MAT ファイル内のすべての変数をアルファベット順に一覧表示します。オプションで、cell 配列 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® は、インデックス (81:100,81:100) で指定された y の要素内に、20 行 20 列の配列を挿入します。

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 ファイル オブジェクトは次の対象へのインデックス付けをサポートしません。

    • 表の変数

    • cell 配列のセル

    • string 配列

    • datetime 配列

    • duration 配列

    • 構造体配列のフィールド

    • ユーザー定義クラス

  • MAT ファイル オブジェクトは、m の出力を使用した関数ハンドルの評価をサポートしません。たとえば、MAT ファイルに関数ハンドル myfunc が含まれている場合、構文 m.myfunc() によって、関数ハンドルのインデックス付けが試行されますが、関数は呼び出されません。

  • ハンドル オブジェクトを保存するとき、MATLAB はオブジェクトのコピー (ハンドルのコピーではなく) を保存します。したがって、オブジェクトが保存されたワークスペース内のハンドル経由でオブジェクトを変更する場合、保存されたハンドル オブジェクトは変更されません。

ヒント

  • 効率的な部分読み込みと保存では、Version 7.3 の MAT ファイルが必要です。Version 7.3 MAT ファイルを作成するには、'-v7.3' オプションを使用して関数 save を呼び出します。たとえば、durer.mat という名前の既存の MAT ファイルを Version 7.3 に変換するには、次のように呼び出します。

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

  • インデックスの一部として end キーワードを使用すると、MATLAB は変数全体をメモリに読み込みます。非常に大きい変数の場合、この読み込み操作によって Out of Memory エラーが発生します。end を使用せずに、size メソッドを使用して変数の範囲を指定します。

    sizeMyVar = size(matObj,'myVar')

バージョン履歴

R2011b で導入