MATLAB 文件操作:load() 与 save()
MATLAB 提供了 load() 和 save() 两个核心函数,用于在磁盘上读取和存储工作区中的变量。掌握这两个命令,能让你轻松保存计算结果、复用中间数据,或在不同脚本之间传递信息。
保存变量:使用 save()
调用 save() 函数将当前工作区中的一个或多个变量写入 .mat 文件(MATLAB 的专用二进制格式)。
-
保存所有变量:
执行save('mydata.mat'),这会将当前工作区中所有变量保存到名为mydata.mat的文件中,文件默认存放在当前工作目录。 -
保存指定变量:
执行save('results.mat', 'x', 'y', 'z'),仅将变量x、y、z存入results.mat。注意:变量名必须用单引号包裹,作为字符串传入。 -
以 ASCII 文本格式保存(可选):
执行save('data.txt', 'A', '-ascii'),将矩阵A以纯文本形式写入data.txt。此格式可用记事本打开,但不保留变量名,且仅支持数值矩阵。 -
追加变量到已有文件:
执行save('archive.mat', 'newVar', '-append'),在不覆盖原内容的前提下,向archive.mat中添加newVar。
⚠️ 注意:
.mat文件是二进制格式,体积小、读写快、支持所有 MATLAB 数据类型(包括结构体、元胞数组等)。除非需要与其他软件交换数据,否则优先使用.mat格式。
读取变量:使用 load()
调用 load() 函数从 .mat 或 ASCII 文件中将数据重新载入工作区。
-
加载整个
.mat文件:
执行load('mydata.mat'),文件中所有变量会自动恢复到工作区,变量名保持不变。 -
仅加载指定变量:
执行load('results.mat', 'x', 'z'),只把x和z读入内存,忽略其他变量。 -
将数据加载为结构体(推荐用于可控导入):
执行S = load('mydata.mat'),此时所有变量不会直接进入工作区,而是作为字段存放在结构体S中。例如,原变量temp可通过S.temp访问。这种方式避免污染工作区,适合在函数中使用。 -
加载 ASCII 文本文件:
执行A = load('data.txt'),MATLAB 会将data.txt中的数值矩阵读入变量A。文件必须是纯数字、空格/制表符分隔的矩形表格,不能包含标题行或非数值字符。
常见用法对比
以下表格总结了 save() 和 load() 在不同场景下的典型调用方式:
| 场景 | save() 命令 |
load() 命令 |
效果说明 |
|---|---|---|---|
| 保存全部变量 | save('all.mat') |
load('all.mat') |
完整复现工作区状态 |
| 保存部分变量 | save('part.mat', 'a', 'b') |
load('part.mat', 'a') |
只读回需要的变量 a |
| 安全加载(避免命名冲突) | — | D = load('data.mat') |
所有变量作为 D 的字段访问 |
| 导出为文本供 Excel 使用 | save('out.txt', 'M', '-ascii') |
M = load('out.txt') |
生成无格式纯数字矩阵 |
实用技巧与注意事项
-
文件路径处理:
若文件不在当前目录,需提供完整路径或相对路径。例如:
执行save('C:\data\output.mat', 'result')(Windows)
执行save('/home/user/data/output.mat', 'result')(Linux/macOS) -
检查文件内容(不加载):
执行whos('-file', 'mydata.mat'),可在不导入变量的情况下查看.mat文件中包含哪些变量及其大小、类型。 -
版本兼容性:
默认情况下,save()生成的是最新版 MAT 文件(如-v7.3),旧版 MATLAB(如 R2006a 之前)可能无法读取。若需兼容老版本,显式指定:
执行save('legacy.mat', 'x', '-v7')或save('veryold.mat', 'x', '-v6') -
压缩选项:
对于大文件,启用压缩可显著减小体积:
执行save('bigdata.mat', 'X', '-v7.3', '-compress') -
变量重命名保存(间接实现):
MATLAB 不支持在save()中直接重命名变量。变通方法是先在工作区创建副本:
执行exported_data = original_var; save('output.mat', 'exported_data')
典型工作流示例
假设你正在处理实验数据,希望将预处理结果保存,并在后续分析脚本中读取:
-
在
preprocess.m中:raw = readmatrix('sensor.csv'); % 读原始数据 filtered = smoothdata(raw); % 滤波处理 stats = [mean(filtered), std(filtered)]; % 计算统计量 save('processed_data.mat', 'filtered', 'stats'); % 保存关键结果 -
在
analyze.m中:data = load('processed_data.mat'); % 安全加载为结构体 plot(data.filtered); % 使用滤波后数据绘图 fprintf('Mean: %.2f\n', data.stats(1));
此流程确保两个脚本解耦,且避免因变量名冲突导致错误。
错误排查要点
-
“未定义函数或变量”错误:
检查load()后变量是否真的存在。若使用结构体方式加载(如S = load(...)),需通过S.varname访问,而非直接使用varname。 -
文件找不到:
确认当前工作目录是否正确。执行pwd查看当前路径,执行dir *.mat列出所有 MAT 文件。 -
ASCII 文件加载失败:
确保文本文件中没有标题行、注释或缺失值。MATLAB 的load要求严格矩形的数值矩阵。 -
保存后变量消失?
检查是否误用了-append模式覆盖了原文件,或是否在函数内部保存但未指定路径导致文件写入临时目录。
执行 help save 或 doc load 可查看官方完整语法说明。日常使用中,记住最简形式:save('file.mat', 'var') 和 load('file.mat') 即可应对大多数场景。

暂无评论,快来抢沙发吧!