MATLAB 数据导入与导出¶
在任何数据分析和科学计算任务中,将外部数据导入 MATLAB 以及将处理结果导出,都是至关重要的第一步和最后一步。MATLAB 提供了极其丰富和灵活的 I/O (Input/Output) 函数,能够处理从简单的文本文件到复杂的多维科学数据格式的各种情况。
两大核心方法:交互式工具 vs. 编程函数
MATLAB 提供了两种主要的数据导入导出方式: 1. 交互式工具: 在 主页 (HOME) 选项卡中,点击 导入数据 (Import Data),会打开一个图形化界面。您可以直观地选择文件、预览数据、选择导入范围和数据类型,并能自动生成用于重复该操作的代码。非常适合初学者和一次性任务。 2. 编程函数: 使用本文档中罗列的函数,以编程方式读写文件。这是实现自动化、可重复分析流程的必经之路。
文本文件 (.txt, .csv, .dat 等)¶
这是最常见的数据交换格式,特别是对于纯数值或表格数据。
现代函数推荐 (R2019a+)
对于带分隔符的文本文件(如 CSV),强烈推荐使用 readmatrix, readtable, readcell 及其对应的写入函数,因为它们功能更强大、性能更好,并且正在逐步取代旧的函数。
readmatrix - 读取纯数值矩阵¶
- 功能: 从文本文件或电子表格中读取纯数值数据,返回一个数值矩阵。它会自动忽略所有非数值内容。
- 语法:
- 语法说明:
readmatrix(filename): 自动检测分隔符并读取文件中的所有数值数据。opts: 一个由detectImportOptions函数生成的导入选项对象,可用于精细控制,如指定数据范围、分隔符、变量名行等。
writematrix - 写入纯数值矩阵¶
- 功能: 将一个数值矩阵写入到文本文件(如 CSV)。
- 语法:
- 语法说明:
'Delimiter': 指定分隔符,如',','\t',' '。
readtable - 读取混合数据表格¶
- 功能: 最常用、最推荐的函数。从文本文件或电子表格中读取表格数据,返回一个
table对象。它能自动处理列标题,并为每一列推断最合适的数据类型(包括数值、文本、日期等)。 - 语法:
- 示例:
writetable - 写入混合数据表格¶
- 功能: 将一个
table对象写入到文件(如 CSV 或 Excel)。它会自动写入变量名作为标题行。 - 语法:
readcell 和 writecell - 读写元胞数组¶
- 功能: 从文件中读取数据并返回一个元胞数组
cell,或将元胞数组写入文件。这在处理格式不规则、包含大量混合文本和数字的非表格数据时非常有用。 - 语法:
底层文本文件 I/O - 精确控制文本读写¶
- 功能: 提供了 C 语言风格的、最底层的文本文件访问能力,可以实现完全自定义的读写操作。
- 核心函数:
fopen,fprintf,fgetl,fclose等。 - 流程:
fopen-> 循环读取/写入 (fgetl,fprintf) ->fclose。 - 示例:
电子表格 (Excel 文件)¶
MATLAB 与 Microsoft Excel 具有极佳的兼容性。readtable, writetable, readmatrix, writematrix 等现代函数都可以直接作用于 .xls, .xlsx, .xlsb 等文件。
关于 xlsread 和 xlswrite
这两个是非常旧的函数,自 R2019a 起已不推荐使用,并在未来版本中可能被移除。请务必使用 readtable 和 writetable 等现代函数来读写 Excel 文件。
- 功能: 读写 Excel 文件。
- 语法 (以
readtable为例): - 语法说明:
'Sheet': 指定要读取或写入的工作表名称或索引。'Range': 指定要操作的单元格范围。
MATLAB 自有格式 (.mat 文件)¶
.mat 文件是 MATLAB 用于保存和加载工作区变量的二进制格式,能够完美地保留所有数据类型和变量结构。
save - 保存变量到MAT文件¶
- 功能: 将当前工作区的一个或多个变量保存到
.mat文件中。 - 语法:
- 语法说明:
save(filename): 保存工作区中的所有变量。save(filename, 'var1', ...): 只保存指定的变量var1,var2等。'-struct', 's': 将结构体s的每个字段保存为独立的变量。'-append': 向已存在的.mat文件中添加或更新变量,而不是覆盖整个文件。
load - 从MAT文件加载变量¶
- 功能: 从
.mat文件加载变量到当前工作区。 - 语法:
- 语法说明:
load(filename): 加载文件中的所有变量。load(filename, 'var1', ...): 只加载指定的变量。S = load(...): 不将变量直接加载到工作区,而是将它们作为字段加载到一个结构体S中。
多媒体文件 (图像、音频、视频)¶
imread 和 imwrite - 读写图像文件¶
- 功能: 读取和写入标准图像格式文件。
- 语法:
- 语法说明:
imread: 返回一个图像矩阵A。对于灰度图,A是二维矩阵;对于 RGB 彩色图,A是 M x N x 3 的三维矩阵。imwrite: 将矩阵A写入图像文件。map是可选的颜色图参数,用于索引图像。
audioread 和 audiowrite - 读写音频文件¶
- 功能: 读取和写入标准音频格式文件。
- 语法:
- 语法说明:
audioread: 返回音频数据y(一个 Nx1 或 Nx2 的矩阵) 和采样率Fs(赫兹)。audiowrite: 将音频数据y以采样率Fs写入文件。
VideoReader 和 VideoWriter - 读写视频文件¶
- 功能: 用于逐帧读取和写入视频文件。它们创建的是对象,需要通过对象的方法来操作。
- 语法:
- 示例 (读取):
Web 数据¶
webread 和 websave - 读写网络数据¶
- 功能: 从 Web 服务 (URL) 读取数据或下载文件,是处理网络数据的现代方法。
- 语法:
- 语法说明:
webread: 能自动将 JSON 或 XML 响应解析为 MATLAB 结构体。websave: 将 URL 指向的内容直接保存为本地文件。options: 一个由weboptions函数创建的选项对象,用于设置请求方法 (GET/POST)、超时、HTTP 头等。