ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

matfile

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

構文

  • m = matfile(filename)
  • m = matfile(filename,'Writable',isWritable)

説明

m = matfile(filename) は、filename という名前の MAT ファイルに関連付けられた MAT ファイル オブジェクトである m を作成します。このオブジェクトを使うと、変数をメモリに読み込むことなく、MAT ファイル内で直接変数にアクセスして変更できます。

関数 matfile が提供する部分的な読み込みや保存では、常に変数全体を処理する loadsave コマンドよりもメモリが少しで済みます。

m = matfile(filename,'Writable',isWritable) は、ファイルへの書き込みアクセスを有効または無効にします。

すべて展開する

MAT ファイルへの変数の追加

20 行 20 列のサンプル配列 x を生成します。

x = magic(20);

myFile.mat という名前の既存の MAT ファイルに関連付けられた MAT ファイル オブジェクトを作成します。

m = matfile('myFile.mat');

x を MAT ファイルに保存します。構造体配列のフィールドへのアクセスと同様に、ドット表記を使用して MAT ファイルの変数を指定します。

m.x = x;

MATLAB® は、x という名前の変数をファイルに追加します。

変数の一部を対象とした、データの保存と読み込み

MAT ファイル変数の特定の要素にアクセスします。

MAT ファイル myFile2.mat を開きます。

m = matfile('myFile2.mat');

myFile2.mat 内の変数 y の一部に、20 行 20 列のサンプル配列を保存します。構造体配列のフィールドへのアクセスと同様に、ドット表記を使用して、MAT ファイルの変数を指定します。

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

MATLAB は、インデックス (81:100,81:100) で指定された y の要素内に、20 行 20 列の配列を挿入します。

配列 y のサブセットを、新しいワークスペース変数 z に読み取ります。

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

MATLAB は、MAT ファイルからインデックス (85:94,85:94) で指定された 10 行 10 列のサブ配列を、ワーススペース変数 z に読み取ります。

変数全体の読み込み

サンプル ファイル topography.mat から変数 topo を読み込みます。

サンプル MAT ファイル topography.mat を開きます。

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

MAT ファイルから変数 topo を読み取ります。

topo = m.topo;

任意の次元の変数の操作

変数の次元を決定し、各列の平均を計算します。

サンプル MAT ファイル stocks.mat を開きます。

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

stocks.mat 内の変数 stocks のサイズを判別します。

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

変数 stocks の各列の平均を計算します。

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

MAT ファイルへの書き込みアクセスの有効化

MAT ファイルを開く際に、Writabletrue に設定して、MAT ファイル myFile.mat への書き込みアクセスを有効にします。既定の設定では、matfile は既存のファイルからのデータの読み込みのみをサポートしています。

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

別の方法としては、MAT ファイルを開いた後、別の手順で Properties.Writable を設定します。

m.Properties.Writable = true;

入力引数

すべて展開する

filename - MAT ファイル名文字列

文字列として指定される MAT ファイル名。ファイルが現在のフォルダーに存在しない場合、filename は絶対パスまたは相対パスを含んでいなければなりません。filename が拡張子を含まない場合、matfile.mat を付加します。

ファイルが存在しない場合、matfile は、変数に対する最初の割り当て後に、Version 7.3 の MAT ファイルを作成します。

matfile は、Version 7.3 形式の MAT ファイルの効率的かつ部分的な読み込みと保存のみをサポートしています。変数にインデックスを付ける MAT ファイルが Version 7 (現在の既定の設定) 以前の場合、MATLAB は警告を出力し、変数の内容全体を一時的に読み込みます。

例: 'myFile.mat'

データ型:char

isWritable - MAT ファイルへの書き込みアクセスtrue | false

MAT ファイルへの書き込みアクセス。true または false のいずれかとして指定します。

  • true は、MAT ファイルへの保存を有効にします。ファイルが読み取り専用の場合、MATLAB は関数 fileattrib を使ってシステム権限を変更します。

  • false は、MAT ファイルへの保存を無効にします。MATLAB はシステム権限を変更しません。

既定値は新しいファイルの場合は true、既存のファイルの場合は false です。

データ型:logical

出力引数

すべて展開する

m - MAT ファイル オブジェクトmatlab.io.MatFile オブジェクト

MAT ファイルに関連付けられている MAT ファイル オブジェクト。

構造体配列のフィールドへのアクセスと同様に、ドット表記を使用して、MAT ファイルの変数にアクセスします。

  • m に対応する MAT ファイルから変数 varName の一部を読み込むには、次のように呼び出します。

    loadedData = m.varName(indices);
  • m に対応する MAT ファイルに変数 varName の一部を保存するには、次のように呼び出します。

    m.varName(indices) = dataToSave;

変数にアクセスする場合、すべての次元のインデックスを指定します。インデックスは、以下のように、単一の値、数値が等間隔に増加する範囲またはコロン (:) になります。

m.varName(100:500,200:600)
m.varName(:,501:1000)
m.varName(1:2:1000,80)

制限

  • matfile は線形インデックスをサポートしません。この場合、すべての次元のインデックスを指定しなければなりません。

  • matfile は次の対象へのインデックス付けをサポートしません。

    • セル配列のセル

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

    • ユーザー定義クラス

    • スパース配列

  • 複素数値は、実数配列のインデックス付け部分に割り当てることはできません。

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

  • 効率的な部分読み込みと保存では、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 メソッドを使用して変数 myVar の範囲を指定します。

    sizeMyVar = size(m,'myVar')

参考

| | |

この情報は役に立ちましたか?