(更新日: 2025年12月29日 )
目次
はじめに
MATLABには、ファイル出力する write○○というコマンドが複数ある。 私がよく使うものはwritetableだが、たまにwritelines も使う。
興味本位からどんなコマンドがあるか調べてみたら、思いの外多かったのでデータごとに使うコマンドを整理してみた。
なお、この記事ではfopen/fprintf/fwrite など file identifier(fid)を扱う I/O を除外してある。
「どのデータに何を使うか」早見表
最初に「どのデータに何を使うか」早見表を作っておく:
定義:Data-first =
func(data,"file")、Filename-first =func("file",data,...)
| データの種類 | 典型的な型 | 推奨関数 | 引数順(Filename-first / Data-first) | 事前作成の要否 | 文法の例(簡略) | MathWorks公式ドキュメント |
|---|---|---|---|---|---|---|
| 数値行列・配列(表形式で保存) | double / single / int* / uint* 行列 | writematrix | Data-first | 不要 | writematrix(A,"data.csv") | (MathWorks) |
table(列名付きの表) | table | writetable | Data-first | 不要 | writetable(T,"table.xlsx") | (MathWorks) |
timetable(時間付き表) | timetable | writetimetable | Data-first | 不要 | writetimetable(TT,"tt.csv") | (MathWorks) |
| 異種混在の表(セル配列) | cell(数値/文字列混在など) | writecell | Data-first | 不要 | writecell(C,"mix.xlsx") | (MathWorks) |
| 行単位テキスト(ログ等) | string 配列 / cellstr | writelines | Data-first | 不要 | writelines(lines,"log.txt") | (MathWorks) |
| 画像(2D/3D配列) | uint8 / uint16(典型), double(0–1想定) | imwrite | Data-first | 不要 | imwrite(I,"img.png") | (MathWorks) |
| 音声 | double / single のベクトル/行列(典型), Fs(サンプリング周波数) | audiowrite | Filename-first | 不要 | audiowrite("out.wav",y,Fs) | (MathWorks) |
| 動画(フレーム列) | getframe の戻り(frame struct)/ 画像配列(例:uint8 H×W×3) | VideoWriter + writeVideo | Filename-first(VideoWriter)/ Object-first(writeVideo) | 不要 | v=VideoWriter("m.mp4"); open(v);writeVideo(v,frame); close(v); | (MathWorks, MathWorks) |
| HDF5(データセット) | 数値配列など | h5write | Filename-first | 場合により要(h5create) | h5write("data.h5","/ds",X,...) | (MathWorks) |
| NetCDF(既存変数へ書込) | 数値/テキスト配列 | ncwrite | Filename-first | 場合により要(nccreate) | ncwrite("data.nc","var",X) | (MathWorks) |
| MATLABネイティブ保存(MAT-file) | 任意変数(struct/table/配列等) | save | Filename-first | 不要 | save("w.mat","A","T") | (MathWorks) |
| MDF(車載計測:timetable→MDF) | timetable(対応型:数値/string/cell等) | mdfWrite | Filename-first | 不要 | mdfWrite("log.mf4",TT) | (MathWorks) |
※ mdfWrite は Vehicle Network Toolbox 等が必要。
補足説明
汎用表形式・数値データ向けの write 系
数値行列・配列
典型例:
A = rand(10,3);
writematrix(A, 'data.csv'); % 数値行列 → CSV
writematrix(A, 'data.xlsx'); % 数値行列 → Exceltable / timetable / 異種データを含む表形式
例:
T = table((1:5)', rand(5,1), 'VariableNames',["ID","Value"]);
TT = table2timetable(T, 'RowTimes', seconds(1:5));
writetable(T, 'table.xlsx'); % table → Excel
writetimetable(TT, 'tt.csv'); % timetable → CSV(時間情報込み)
C = {'A', 1; 'B', 2};
writecell(C, 'celldata.csv'); % cell → CSVテキスト(文字列・行単位のログなど)
行単位のテキストファイル
例:
lines = ["first line", "second line", "third line"];
writelines(lines, 'log.txt'); % 上書き
writelines(lines, 'log.txt', Append=true); % 追記テキストを「列として持つ表」なら writetable/writecell、 「純粋な行列のテキストログ」なら writelines がシンプル、という整理。
メディア系: 画像・音声・動画
画像
I = imread('input.png'); % 何らかの処理
imwrite(I, 'output.jpg'); % 画像として保存音声
[y, Fs] = audioread('in.wav'); % 処理など
audiowrite('out.wav', y, Fs); % WAV として書き出し動画
v = VideoWriter('movie.mp4', 'MPEG-4');
open(v);
for k = 1:N
frame = getframe(gca); % あるいは画像配列
writeVideo(v, frame);
end
close(v);科学技術計算向けフォーマット
HDF5
事前に h5create が必要な場合あり。
data = uint8(magic(5));
h5create('data.h5', '/dataset1', size(data));
h5write('data.h5', '/dataset1', data);NetCDF
事前に nccreate が必要な場合あり
(詳細は NetCDF の用途次第だが、「外部連携用フォーマット」という意味で HDF5 と並んでよく使われるようだ。)
MATLAB 専用形式(.mat)
write◯◯ ではないが、実務上避けて通れないので補足しておく:
save('workspace.mat', 'A', 'T', 'TT'); % 必要な変数のみ保存
save('bigdata.mat', 'X', '-v7.3'); % 2GB超など大規模配列JSON / XML など(おまけ)
write◯◯ ではないが、「テキスト系構造化データ」の代表として:
- JSON:
jsonencodeで文字列にしてからwritelinesで保存 - XML:
xmlwriteで DOM オブジェクトや XML Document をファイルへ
おわりに
上記はこの記事を書いている時点での情報である。 MATLABコマンドは、データ形式の仕様変更と同様に、仕様や推奨の変更があることに注意されたい。
なお読み込み系も同様にコマンドが用意されている。 以下は対応表である:













