文章目录

MATLAB 文件操作:load() 与 save()

发布于 2026-04-04 09:31:26 · 浏览 5 次 · 评论 0 条

MATLAB 文件操作:load() 与 save()

MATLAB 提供了 load()save() 两个核心函数,用于在磁盘上读取和存储工作区中的变量。掌握这两个命令,能让你轻松保存计算结果、复用中间数据,或在不同脚本之间传递信息。


保存变量:使用 save()

调用 save() 函数将当前工作区中的一个或多个变量写入 .mat 文件(MATLAB 的专用二进制格式)。

  1. 保存所有变量
    执行 save('mydata.mat'),这会将当前工作区中所有变量保存到名为 mydata.mat 的文件中,文件默认存放在当前工作目录。

  2. 保存指定变量
    执行 save('results.mat', 'x', 'y', 'z'),仅将变量 xyz 存入 results.mat。注意:变量名必须用单引号包裹,作为字符串传入。

  3. 以 ASCII 文本格式保存(可选)
    执行 save('data.txt', 'A', '-ascii'),将矩阵 A 以纯文本形式写入 data.txt。此格式可用记事本打开,但不保留变量名,且仅支持数值矩阵。

  4. 追加变量到已有文件
    执行 save('archive.mat', 'newVar', '-append'),在不覆盖原内容的前提下,向 archive.mat 中添加 newVar

⚠️ 注意:.mat 文件是二进制格式,体积小、读写快、支持所有 MATLAB 数据类型(包括结构体、元胞数组等)。除非需要与其他软件交换数据,否则优先使用 .mat 格式。


读取变量:使用 load()

调用 load() 函数从 .mat 或 ASCII 文件中将数据重新载入工作区。

  1. 加载整个 .mat 文件
    执行 load('mydata.mat'),文件中所有变量会自动恢复到工作区,变量名保持不变。

  2. 仅加载指定变量
    执行 load('results.mat', 'x', 'z'),只把 xz 读入内存,忽略其他变量。

  3. 将数据加载为结构体(推荐用于可控导入)
    执行 S = load('mydata.mat'),此时所有变量不会直接进入工作区,而是作为字段存放在结构体 S 中。例如,原变量 temp 可通过 S.temp 访问。这种方式避免污染工作区,适合在函数中使用。

  4. 加载 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')


典型工作流示例

假设你正在处理实验数据,希望将预处理结果保存,并在后续分析脚本中读取:

  1. preprocess.m

    raw = readmatrix('sensor.csv');      % 读原始数据
    filtered = smoothdata(raw);          % 滤波处理
    stats = [mean(filtered), std(filtered)]; % 计算统计量
    save('processed_data.mat', 'filtered', 'stats'); % 保存关键结果
  2. 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 savedoc load 可查看官方完整语法说明。日常使用中,记住最简形式:save('file.mat', 'var')load('file.mat') 即可应对大多数场景。

评论 (0)

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

扫一扫,手机查看

扫描上方二维码,在手机上查看本文