MATLABで大きな .mat ファイルを扱うとき、こんなお悩みはありませんか?
- ファイルサイズが大きすぎて、全体を処理しようとするとメモリが足りない
- 必要な一部分だけ使いたいのに、全部ロードされてしまう
- 処理が重くて作業効率が落ちる
- 都度
clearで変数整理をしている
こうした場面で活躍するのが matfile 関数 です。
matfile を使うと、load 関数に比べて メモリ使用量を大幅に抑えることができます。
その理由は、データを一度メモリに展開するのではなく、.mat ファイルへ直接アクセスする仕組みになっているためだそうです。(公式リンク)
今回は、関数matfileの動作を試してみました
※コードおよび動作確認の結果は、画像の後に記載しています

■ 実際に試してみる
MATLABに標準で用意されているサンプルデータを使って確認してみます。
今回は、.mat ファイル内の「特定の変数の一部分だけを取り出したい…」ケースを考えました。
■ load を使った場合
load を使うと、データの一部しか使わない場合でも ファイル全体がメモリに読み込まれます。
そのため、抽出処理の前段階で 大きなメモリ容量が必要になります。
■ matfile を使った場合
一方、matfile を使うと、
- 必要な箇所だけを直接参照する
- 主にに保持するのは抽出後のデータ
となるため、最小限のメモリで処理が可能です。
■ 添付画像のポイント
画像の whos の結果を見ると違いが分かります
loadの場合
→ ファイル全体が読み込まれ、大きなメモリを消費していますmatfileの場合
→ 主な容量は参照オブジェクトのようです
■ おわりに
今回は、matfileを実際に使ってみてload関数と比較してみました。データサイズが大きな.matファイルを扱う際に試してみようかと思います!
今後も「MATLAB関数巡り」として、
実務で役立つ関数をご紹介できればと考えています!
MATLAB / LabVIEW関連の投稿をXやYoutubeでしています。
フォローしていただけますと幸いです。
X: https://x.com/SCISEL1990
YouTube:https://www.youtube.com/@scisel
関数loadの場合
clear
M = load('topography.mat');
M_topo_sub = M.topo(1:10,1:10);
whos関数matfileの場合
clear
m = matfile('topography.mat');
m_topo_sub = m.topo(1:10,1:10);
whos