核心命令:save
save 是最通用、最核心的命令,用于将工作区中的变量保存到 .mat 文件中。.mat 是 MATLAB 的标准二进制数据文件格式。

保存单个矩阵
这是最基本的情况。
% 1. 创建一个示例矩阵
A = magic(3); % 创建一个 3x3 的魔方阵
% 2. 保存矩阵 A 到文件 'my_matrix.mat'
% 文件会保存在 MATLAB 的当前工作目录下
save('my_matrix.mat', 'A');
执行后,你会在当前文件夹看到一个名为 my_matrix.mat 的文件,这个文件包含了变量 A 的所有信息(值、数据类型、维度等)。
保存多个矩阵
你可以一次保存多个变量,只需将它们的变量名作为字符串放在后面。
% 创建两个矩阵
A = rand(4, 2); % 4x2 随机矩阵
B = [1 2 3; 4 5 6]; % 2x3 矩阵
% 将 A 和 B 保存到同一个文件 'multi_data.mat'
save('multi_data.mat', 'A', 'B');
保存所有工作区变量
如果你想快速保存当前工作区中所有的变量,可以使用 save 命令而不指定变量名。

% 假设工作区中有 A, B, C, D 等多个变量
% 保存所有变量到文件 'all_workspace_vars.mat'
save('all_workspace_vars.mat');
使用通配符 选择变量
你可以使用通配符来选择符合特定模式的变量。
% 假设工作区中有 Data1, Data2, Result1, Temp 等变量
% 只保存所有以 'Data' 开头的变量
save('data_files.mat', 'Data*');
save 命令的常用选项 (Flags)
save 命令支持多种选项,通过在文件名后添加 -flag 的形式来使用。
-ascii: 保存为可读的文本文件
当你需要将数据导出供其他程序(如 Excel, Python, C++)读取时,这个选项非常有用,它保存的是纯文本,没有 MATLAB 的元数据。
注意:-ascii 会保存为 8 位 ASCII 文本,精度有限,对于高精度数据,推荐使用 -ascii -double。

A = pi * rand(3, 4);
% 保存为 8 位 ASCII 文本
save('data_ascii.txt', 'A', '-ascii');
% 保存为双精度 ASCII 文本(推荐,精度更高)
save('data_double.txt', 'A', '-ascii', '-double');
执行后,你会得到一个 data_double.txt 文件,用记事本打开可以看到类似这样的内容:
2.83473452342342 1.23456789012346 0.98765432109877 3.14159265358979
0.12345678901235 2.71828182845905 1.41421356237310 0.70710678118655
1.61803398874989 0.50000000000000 2.23606797749979 1.73205080756888
-mat: 强制保存为 .mat 文件
当你想将文件保存为非 .mat 扩展名(.data)但又希望它仍然是 MATLAB 的二进制格式时,可以使用这个选项。
A = magic(5);
save('my_data_file.data', 'A', '-mat');
-v7.3: 保存为大型 .mat 文件 (HDF5 格式)
对于非常大的矩阵(通常超过 2GB),标准的 .mat 格式可能会遇到问题。-v7.3 选项将文件保存为基于 HDF5 的格式,支持:
- 单个文件超过 2GB。
- 保存更多种类的数据类型(如大数据集、元数据、复杂结构体等)。
- 可以被其他 HDF5 兼容工具(如 Python 的
h5py库)读取。
% 创建一个非常大的矩阵 (约 1.5 GB)
large_matrix = rand(50000, 'single'); % single 类型以减小文件大小
% 使用 -v7.3 选项保存
save('large_file.mat', 'large_matrix', '-v7.3');
其他保存方法(针对特定需求)
保存为 CSV 文件 (供 Excel 等软件使用)
CSV 是一种非常通用的表格数据格式,虽然可以使用 save -ascii,但 writematrix 和 writetable 是更现代、更推荐的方法。
使用 writematrix (推荐)
A = [1, 2, 3; 4, 5, 6; 7, 8, 9]; % 将矩阵 A 保存为 'matrix.csv' % 默认会使用逗号作为分隔符,并包含不带引号的文本头 writematrix(A, 'matrix.csv');
使用 csvwrite (旧版,不推荐)
% 功能与 writematrix 类似,但语法更旧
csvwrite('matrix_old.csv', A);
保存为文本文件 (自定义格式)
如果需要控制输出格式(指定小数位数、分隔符等),可以使用 fprintf。
A = pi * rand(3, 2);
% 打开一个文件用于写入,'w' 表示写入模式(会覆盖旧文件)
fileID = fopen('my_data_formatted.txt', 'w');
% 检查文件是否成功打开
if fileID == -1
error('无法打开文件');
end
% 写入文件头
fprintf(fileID, '这是我的自定义数据文件\n');
fprintf(fileID, '列1\t列2\n'); % \t 是制表符
% 循环写入矩阵数据,%.4f 表示保留4位小数
for i = 1:size(A, 1)
fprintf(fileID, '%.4f\t%.4f\n', A(i, :));
end
% 关闭文件
fclose(fileID);
disp('数据已成功写入 my_data_formatted.txt');
输出文件 my_data_formatted.txt 内容如下:
这是我的自定义数据文件
列1 列2
2.1416 0.1416
0.7183 1.4142
1.6180 0.5000
如何读取保存的文件?
| 保存方法 | 读取命令 | 说明 |
|---|---|---|
save (.mat) |
load('my_matrix.mat') |
读取 .mat 文件中的所有变量到工作区。 |
[A, B] = load('multi_data.mat', 'A', 'B'); |
只读取指定的变量。 | |
save -ascii (文本) |
A = load('data_double.txt'); |
load 命令可以自动解析数字格式的文本文件。 |
writematrix (CSV) |
A = readmatrix('matrix.csv'); |
读取 CSV 或文本文件中的数值数据到矩阵。 |
fprintf (自定义文本) |
A = load('my_data_formatted.txt'); |
如果是纯数字,load 仍然可用,如果包含非数字文本,需要用 textscan 等更高级的函数。 |
总结与推荐
| 你的目标 | 推荐命令 | 优点 |
|---|---|---|
| 在 MATLAB 中暂存或分享数据 | save('file.mat', 'var1', 'var2'); |
保留所有数据信息,文件小,加载快。 |
| 供 MATLAB 外部程序(如 Excel)使用 | writematrix(A, 'file.csv'); |
通用格式,易于在其他软件中打开。 |
| 保存非常大的数据集 (>2GB) | save('large_file.mat', 'A', '-v7.3'); |
突破文件大小限制,兼容性好。 |
| 需要精确控制输出格式 | fprintf |
灵活性最高,可自定义分隔符、精度等。 |
对于绝大多数情况,save 和 writematrix 是你最需要掌握的两个命令。
