菜鸟科技网

matlab load命令

load 是 MATLAB 中一个非常基础且核心的命令,它的主要作用是从文件中加载数据到 MATLAB 的工作区中,使其成为变量。

matlab load命令-图1
(图片来源网络,侵删)

load 命令的基本语法

load 命令的语法非常灵活,可以根据不同的文件类型和格式进行调整。

语法 1: 加载整个文件 (最常用)

load filename
  • filename: 要加载的文件名。
  • 效果:
    • 如果文件是 MATLAB 的 .mat 文件,load 会将其中存储的所有变量加载到工作区中。
    • 如果文件是纯文本文件(如 .txt, .csv, .dat),load 会尝试将其加载为一个名为 filename(不带扩展名)的变量,通常是数值矩阵。
    • 如果文件是 .mat 文件,并且该文件中只包含一个变量,那么加载后该变量的名称就是 filename(不带扩展名)。

语法 2: 加载 .mat 文件中的特定变量

load filename variable_name
  • filename: .mat 文件名。
  • variable_name: 要加载的变量名,可以是一个字符串,也可以是一个包含多个变量名的元胞数组。
  • 效果: 只有指定的变量才会被加载到工作区,其他变量会被忽略。

语法 3: 将加载的变量指定为新的名称

load filename new_variable_name
  • filename: .mat 文件名。
  • new_variable_name: 为加载后的变量指定的新名称。
  • 前提: 这个语法只适用于 .mat 文件中只包含一个变量的情况。
  • 效果: 文件中的变量会被加载,并被命名为 new_variable_name

语法 4: 从纯文本文件中加载数据并指定输出变量名

A = load('filename.txt')
  • filename.txt: 纯文本文件名。
  • A: 你为数据指定的变量名。
  • 效果: 将文件中的数据加载到变量 A 中,这是加载文本数据时最推荐的方式,因为它明确地指定了输出变量。

load 命令能加载哪些文件类型?

load 命令主要处理两种类型的文件:

a) MATLAB 数据文件 (.mat 文件)

这是 MATLAB 的专有二进制数据格式,用于保存一个或多个 MATLAB 变量,它效率高,能保存各种数据类型(矩阵、结构体、元胞数组、对象等)。

示例: 假设你有一个名为 my_data.mat 的文件,它是在 MATLAB 中通过 save 命令创建的:

matlab load命令-图2
(图片来源网络,侵删)
% 创建一些数据
A = rand(3, 4);
B = 'Hello World';
S.a = 10; S.b = [1 2 3];
% 保存到 .mat 文件
save my_data.mat A B S

使用 load 来加载它们:

% 加载所有变量
load my_data.mat
% 检查工作区
whos
%  你会看到 A, B, S 都已经存在了
% 只加载变量 A
load my_data.mat A
% 将变量 A 加载并命名为 C
% (前提是 my_data.mat 中只有 A 一个变量,或者我们使用下面更安全的方式)
C = load('my_data.mat', 'A');

b) 纯文本数据文件 (如 .txt, .csv, .dat)

load 命令可以读取简单的、格式规整的文本文件,文件中的数据必须由空格、逗号或制表符分隔。

规则:

  • 文件的第一行通常被解释为列标题(字符串),或者如果全是数字,则被视为数据的第一行。
  • 如果文件包含非数字字符(如列标题),load 会失败。
  • load 会忽略文件中的空行和以 开头的注释行。

示例: 假设你有一个名为 sensor_data.txt 的文件,内容如下:

matlab load命令-图3
(图片来源网络,侵删)
Time,Temp,Pressure
1,25.1,1013.2
2,25.3,1012.8
3,24.9,1013.5

错误的使用方式:

load sensor_data.txt % 这会报错,因为第一行是字符串

正确的方式 1: 使用 importdata importdata 是一个更强大的函数,可以处理带有头文件和混合数据的文本文件。

[data, headers] = importdata('sensor_data.txt', ',');
% data 是一个数值矩阵
% headers 是一个元胞数组,包含列名
disp(data);
disp(headers);

正确的方式 2: 使用 readtable (推荐)的文本文件(尤其是 CSV),readtable 是最佳选择,它会直接创建一个 table 变量。

T = readtable('sensor_data.txt');
% T 是一个 table 变量,列名为 'Time', 'Temp', 'Pressure'
disp(T);
% 访问数据
disp(T.Time);
disp(T.Pressure(1));

正确的方式 3: 如果文件没有标题行 sensor_data.txt 文件内容是纯数字:

1,25.1,1013.2
2,25.3,1012.8
3,24.9,1013.5

load 就可以完美工作:

sensor_data = load('sensor_data.txt'); % 使用输出变量名是好习惯
% sensor_data 是一个 3x3 的 double 矩阵
disp(sensor_data);

高级选项

load 命令还支持一些可选参数,使其更灵活。

'-mat''-ascii'

这两个选项可以明确指定文件类型,避免 load 自动判断。

% 强制将文件作为二进制 .mat 文件加载
load('my_data.txt', '-mat'); 
% 强制将文件作为 ASCII 文本文件加载
load('my_data.mat', '-ascii'); 

'-nocompression'

当加载由 save -v7.3 创建的大型压缩 .mat 文件时,可以使用此选项来禁用解压缩过程。

'-regexp'

使用正则表达式来匹配 .mat 文件中的变量名。

% 加载所有以 'data' 开头的变量
load my_data.mat '-regexp' '^data'

load 的替代方案

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

函数 适用场景 优点
load 加载 .mat 文件或简单的纯数字文本文件。 简单、快捷。
save load 配对,将工作区变量保存为 .mat 文件。 load 的反向操作。
importdata 加载混合数据类型(文本和数字)的文本文件。 load 更健壮,能处理复杂文本格式。
readtable 的文本文件(CSV, TSV等)。 强烈推荐。 创建易于操作的 table 变量,保留列名。
readmatrix 加载纯数字的文本文件,输出为矩阵。 load 更明确,专为数字矩阵设计。
csvread / csvwrite 专门用于读写 CSV 文件。 功能较旧,readmatrix / writematrix 是现代替代品。
fopen, fscanf, textscan 读取格式非常复杂或不规则的文本文件。 提供最大的控制力,但代码量也更多。

总结与最佳实践

  1. .mat 文件: 使用 load filenameload filename var1 var2,这是最高效、最可靠的方式。
  2. 的文本文件 (如 CSV): 首选 readtable,它能完美处理列标题,并生成方便的 table 数据类型。
  3. 纯数字文本文件: 可以使用 loadreadmatrixA = load('file.txt') 是简洁的写法。
  4. 复杂文本文件: 使用 importdata 或更底层的 fopen/textscan 进行精细控制。

load 是 MATLAB 的基石之一,掌握它能让你高效地管理数据,是进行后续分析和可视化的第一步。

分享:
扫描分享到社交APP
上一篇
下一篇