菜鸟科技网

matlab load命令如何正确使用?

load 是 MATLAB 中最基本也最重要的命令之一,它的核心功能是从文件中加载数据到 MATLAB 的工作区中,使其成为可操作的变量。

matlab load命令如何正确使用?-图1
(图片来源网络,侵删)

load 命令的基本用法

load 命令的语法非常灵活,主要分为两种情况:加载整个 MAT 文件和加载特定文本文件。

1 加载 MAT 文件 (最常用)

MAT 文件是 MATLAB 专用的二进制数据文件,可以保存一个或多个变量,这是 MATLAB 中数据持久化和共享的首选格式。

语法 1: 加载整个 MAT 文件

load filename
  • 功能: 加载名为 filename.mat 的文件中的所有变量。

    matlab load命令如何正确使用?-图2
    (图片来源网络,侵删)
  • 示例: 假设你有一个名为 my_data.mat 的文件,它包含两个变量:A (一个 3x3 矩阵) 和 str (一个字符串)。

    % 检查工作区,此时是空的
    whos
    Name      Size            Bytes  Class     Attributes
    ---------------------------------------------
    % 加载文件
    load my_data
    % 再次检查工作区,变量 A 和 str 已经被加载
    whos
    Name      Size            Bytes  Class     Attributes
    A         3x3                72  double              
    str       1x12               24  char                

语法 2: 加载 MAT 文件并指定变量名

load filename variable_name
  • 功能: 只从 filename.mat 文件中加载指定的 variable_name 变量,如果只想加载一个或部分变量,这非常有用。

  • 示例: 继续使用上面的 my_data.mat 文件,但我们只想加载矩阵 A

    matlab load命令如何正确使用?-图3
    (图片来源网络,侵删)
    % 清空工作区
    clear
    % 只加载变量 A
    load my_data A
    % 检查工作区,只有 A 被加载
    whos
    Name      Size            Bytes  Class     Attributes
    A         3x3                72  double              

语法 3: 加载 MAT 文件并赋予新变量名

new_variable = load(filename, variables)
  • 功能: 从文件中加载指定的变量,并将它们存入一个结构体 new_variable 中,这种方法的优点是不会污染当前工作区,并且可以清晰地看到从文件中加载了哪些变量。

  • 示例:

    % 清空工作区
    clear
    % 加载数据到结构体 my_loaded_data 中
    my_loaded_data = load('my_data.mat');
    % 检查工作区,只有一个结构体变量
    whos
    Name             Size            Bytes  Class     Attributes
    ------------------------------------------------------------
    my_loaded_data   1x1             880  struct              
    % 通过结构体访问其中的变量
    disp(my_loaded_data.A);
        % (会显示矩阵 A 的内容)
    disp(my_loaded_data.str);
        % (会显示字符串 str 的内容)

2 加载文本文件 (如 .txt, .csv, .dat)

load 也可以用来加载简单的文本文件,但文件格式必须非常规整,最简单的情况是文件中只包含纯数字,每行代表一个变量,空格或逗号分隔。

语法:

M = load('filename.txt')
  • 功能: 将文本文件 filename.txt 中的数据加载到一个矩阵 M 中。
  • 关键要求:
    • 文件的第一行必须是变量名(可选,但推荐)。
    • 数据必须是纯数字。
    • 数据必须是矩形(即每一行的列数相同)。
    • 分隔符只能是空格。

示例 1: 标准格式 假设有一个名为 simple_data.txt 的文件,内容如下:

% 这是一个简单的数据文件
x1, x2, x3
1.0, 2.0, 3.0
4.0, 5.0, 6.0
7.0, 8.0, 9.0

注意: 虽然这里用了逗号,但 load 命令在处理 .txt 文件时,更推荐使用空格作为分隔符,上面的文件可能无法被 load 正确解析。

一个更可靠的 simple_data.txt 文件内容应该是:

% 这是一个简单的数据文件
x1 x2 x3
1.0 2.0 3.0
4.0 5.0 6.0
7.0 8.0 9.0

使用 load 命令:

data = load('simple_data.txt');
% 查看加载的数据
disp(data);
     1     2     3
     4     5     6
     7     8     9
% 查看工作区
whos
Name      Size            Bytes  Class     Attributes
data      3x3               72  double              

可以看到,load 会忽略注释行(以 开头的行)和标题行(变量名行),直接读取数据部分。

示例 2: 简单数据文件 numbers.txt 文件内容只有数字:

1 2 3
4 5 6
7 8 9

执行 load('numbers.txt') 会得到同样的结果。


高级用法和可选参数

load 命令还有一些更高级的用法,主要通过函数形式实现。

1 指定分隔符

当加载文本文件时,如果分隔符不是空格(例如是逗号或分号),需要使用 importdata 函数,而不是 load

示例: 加载 CSV 文件 假设 data.csv 文件内容如下:

Time,Temp,Pressure
1,23.1,101.2
2,23.5,101.3
3,23.0,101.1

使用 importdata:

% 使用 importdata 加载,并指定逗号为分隔符
data_struct = importdata('data.csv', ',');
% importdata 返回一个结构体
disp(data_struct.data);
     1.0000   23.1000  101.2000
     2.0000   23.5000  101.3000
     3.0000   23.0000  101.1000

对于非空格分隔的文本文件,importdata 是比 load 更好的选择。

2 处理大型文件

对于非常大的 MAT 文件,可以使用 matfile 函数,它不会一次性将所有数据加载到内存中,而是创建一个内存映射文件,让你可以按需访问和修改文件中的变量,极大地节省了内存。

语法:

matObj = matfile('filename.mat');

示例: 假设 large_matrix.mat 包含一个 10000x10000 的矩阵 BigM

% 创建一个内存映射对象
m = matfile('large_matrix.mat');
% 查看变量信息,但数据并未加载
m.BigM
ans =
  10000x10000 double (not in memory)
% 只加载矩阵的第一行,而不是整个矩阵
first_row = m.BigM(1, :);
% 修改矩阵中的一个元素,这个操作会直接写入文件
m.BigM(1, 1) = 999;

load 命令的替代方案

虽然 load 很强大,但在某些场景下,其他函数可能更合适。

场景 推荐函数 说明
加载任何格式的文本/数据文件 readtable 强烈推荐,将数据读取为 table 数据类型,列名可以保留,处理混合数据类型(数字、字符串、日期等)非常方便。
加载特定格式的文本/数据文件 readmatrix, readcell, readvars readmatrix 专门用于加载纯数值数据;readcell 加载为单元格数组;readvars 功能类似 readtable,但返回的是结构体数组。
加载 Excel 文件 readtable, readmatrix, xlsread (旧版) readtable 是现代 MATLAB 的首选,能很好地处理表头和不同数据类型。xlsread 已被部分弃用。
加载图像文件 imread 专门用于加载图像文件(如 .jpg, .png, .bmp),返回图像数据矩阵。
加载音频文件 audioread 专门用于加载音频文件(如 .wav, .mp3),返回音频数据矩阵和采样率。

完整示例:从数据加载到绘图

假设我们有一个名为 sensor_data.csv 的文件,内容如下:

Timestamp,Temperature,Humidity
2025-01-01 08:00:00,22.5,45
2025-01-01 09:00:00,23.1,44
2025-01-01 10:00:00,24.0,43
2025-01-01 11:00:00,25.2,41

目标: 加载数据并绘制温度随时间变化的曲线。

使用 load (不推荐,因为包含逗号和字符串)

% 这种方法会失败或产生错误
% data = load('sensor_data.csv'); 

使用 importdata (可行)

% 加载数据
data_struct = importdata('sensor_data.csv', ',');
% 提取数值数据部分
temp_data = data_struct.data(:, 2); % 温度在第2列
% 由于时间列是字符串,直接绘图会按序号处理
% plot(data_struct.data(:,1), temp_data); % 这样绘图不正确
% 需要将时间字符串转换为日期数字
timestamps = datetime(data_struct.textdata(2:end, 1), 'InputFormat', 'yyyy-MM-dd HH:mm:ss');
plot(timestamps, temp_data);'Temperature vs Time');
xlabel('Time');
ylabel('Temperature (°C)');
grid on;

使用 readtable (最佳实践)

% 使用 readtable 加载数据,自动处理表头和列名
T = readtable('sensor_data.csv');
% 查看表格
disp(T);
% Timestamps          Temperature    Humidity
% __________________    __________    ________
%
% 01-Jan-2025 08:00:00    22.5          45       
% 01-Jan-2025 09:00:00    23.1          44       
% 01-Jan-2025 10:00:00    24            43       
% 01-Jan-2025 11:00:00    25.2          41       
% 直接使用列名进行绘图,非常直观
plot(T.Timestamps, T.Temperature);'Temperature vs Time');
xlabel('Time');
ylabel('Temperature (°C)');
grid on;

从上面的例子可以看出,readtable 是处理表格数据的现代、高效且直观的方法。


命令 主要用途 优点 缺点
load 加载 .mat 文件;加载简单的、空格分隔的文本文件。 语法简单,速度快,是 MATLAB 的核心命令。 对文本文件格式要求苛刻,不处理表头,不适合混合数据类型。
importdata 加载各种格式的文本/数据文件,可指定分隔符。 load 灵活,能处理更多文本格式。 返回结构体,使用不如 readtable 方便。
readtable 强烈推荐用于表格数据,加载文本、CSV 等,保留列名。 最佳实践,处理混合数据类型能力强,代码可读性高。 相对 load 稍微复杂一点。
matfile 处理超大 .mat 文件。 节省内存,支持按需访问和修改大文件。 语法稍有不同,主要用于特定场景。

核心建议

  • MATLAB 之间传递数据:始终使用 .mat 文件和 save/load 命令。
  • 处理从实验、传感器、数据库等来源获得的表格数据:优先使用 readtable
  • 快速加载一个简单的、只有数字的文本文件:可以使用 load
  • 加载非空格分隔的文本文件:使用 importdatareadtable
分享:
扫描分享到社交APP
上一篇
下一篇