Skip to content

MATLAB - 数据输出

从 MATLAB 导出数据意味着将工作区中的变量写入文件。这对于保存结果、与其他应用程序共享数据或创建报告至关重要。现代 MATLAB 提供了一套高级函数,使数据导出变得简单而健壮。

对于大多数常见的数据导出任务,你应该使用 write___ 系列函数。这些函数功能强大、灵活,并且已经取代了像 dlmwrite 这样的旧函数。

  • writematrix:将数值矩阵写入文本文件。
  • writecell:将单元格数组(cell array)写入文本文件。
  • writetable:将 table(表格)写入文件。对于混合类型表格数据(例如,包含数字、文本和日期的列),这是最强大的选项,并支持 .csv 和 .xlsx 等格式。

让我们创建一个数值矩阵并将其保存为逗号分隔值(CSV)文件。

% 创建一个示例数值矩阵
num_matrix = [1.5, 2.3, 8.1; 4.0, 5.2, 6.9];
% 将矩阵导出到 CSV 文件
output_filename = 'matrix_data.csv';
writematrix(num_matrix, output_filename);
% 通过显示文件内容进行验证
fprintf('File ''%s'' created. Content:\n', output_filename);
type(output_filename);

输出文件 matrix_data.csv 将包含:

1.5,2.3,8.1
4,5.2,6.9

table 数据类型非常适合处理带有不同类型命名列的数据。writetable 会自动在输出文件中包含列头。

% 创建一个包含混合数据类型的表格
LastName = ["Smith"; "Jones"; "Williams"];
Age = [38; 29; 45];
BloodPressure = [124, 82; 115, 78; 130, 88];
data_table = table(LastName, Age, BloodPressure);
% 将表格导出到使用制表符作为分隔符的文本文件
output_filename = 'patient_data.txt';
writetable(data_table, output_filename, 'Delimiter', '\t');
% 通过显示文件内容进行验证
fprintf('\nFile ''%s'' created. Content:\n', output_filename);
type(output_filename);

输出文件 patient_data.txt 将被整齐格式化为:

LastName Age BloodPressure_1 BloodPressure_2
"Smith" 38 124 82
"Jones" 29 115 78
"Williams" 45 130 88

当你需要完全控制文件格式时(例如,创建结构化日志文件或自定义文本格式),你可以使用低级 I/O 函数:fopen、fprintf 和 fclose。

此示例在一个文本文件中创建了一个两列表格,展示了健壮的错误处理和文件管理。

% 准备数据
x = 0:10:100;
y_data = [x; log(x)];
output_filename = 'log_table.txt';
% 打开文件用于写入 ('w')。最佳实践是检查文件 ID。
fid = fopen(output_filename, 'w');
if fid == -1
error('Cannot open file: %s', output_filename);
end
% 使用 try-catch 块以确保即使发生错误也能关闭文件
try
% 将文件头写入文件
fprintf(fid, '--- Logarithm Table ---\n');
fprintf(fid, '%-10s | %-15s\n', 'Value', 'Log(Value)');
fprintf(fid, '---------------------------\n');
% 在循环中写入数据以进行精确格式化
fprintf(fid, '%-10.2f | %-15.4f\n', y_data);
fprintf('\nFile ''%s'' created successfully.\n', output_filename);
catch ME
% 如果写入过程中发生错误,关闭文件并重新抛出错误
fclose(fid);
rethrow(ME);
end
% 关闭文件
fclose(fid);
% 显示创建的文件
type(output_filename);

生成的文件 log_table.txt 将如下所示:

--- Logarithm Table ---
Value | Log(Value)
---------------------------
0.00 | -Inf
10.00 | 2.3026
20.00 | 2.9957
30.00 | 3.4012
40.00 | 3.6889
50.00 | 3.9120
60.00 | 4.0943
70.00 | 4.2485
80.00 | 4.3820
90.00 | 4.4998
100.00 | 4.6052
  • diary:创建 MATLAB 命令行窗口会话的日志。对于简单的记录非常有用。使用 diary on 开始,diary off 停止。
  • save 命令:主要用于将工作区变量保存到 .mat 文件(save('my_data.mat')),这是一种二进制格式,非常适合之后重新加载到 MATLAB 中。-ascii 选项被认为是旧版功能,并且不如 writematrix 灵活。

关于废弃函数的说明:函数 dlmwrite 不再推荐使用。请使用 writematrix,因为它具有改进的性能和功能。