数组是MATLAB的核心数据结构,所有计算均基于数组完成。本文系统讲解MATLAB中最常用的数组创建方法,包括直接赋值、linspace()、zeros()、ones()、rand()等函数的语法、适用场景及实战技巧,覆盖从基础一维数组到高阶多维数组的创建,帮助快速掌握MATLAB数组操作的核心技能。
一、直接赋值法:最基础的数组创建方式
直接赋值是MATLAB创建数组最直观的方法,适合已知具体元素值的场景,可创建一维数组、二维矩阵(多维数组),是新手入门的首要掌握方式。
1. 核心语法
matlab
% 一维数组(行向量):元素用空格/逗号分隔,方括号包裹
行数组 = [元素1 元素2 元素3 ...]; % 空格分隔(推荐)
行数组 = [元素1, 元素2, 元素3 ...]; % 逗号分隔
% 二维数组(矩阵):行内元素用空格/逗号分隔,行之间用分号分隔
矩阵 = [行1元素1 行1元素2; 行2元素1 行2元素2];
% 一维数组(列向量):元素后加分号,或用转置符'
列数组 = [元素1; 元素2; 元素3 ...];
列数组 = [元素1 元素2 元素3]'; % 转置法(更便捷)
2. 实战示例
示例1:创建一维行/列数组
matlab
% 创建一维行数组
row_arr = [1 2 3 4 5];
disp('一维行数组:');
disp(row_arr);
% 创建一维列数组(两种方式)
col_arr1 = [10; 20; 30];
col_arr2 = [40 50 60]'; % 转置法
disp('一维列数组1:');
disp(col_arr1);
disp('一维列数组2:');
disp(col_arr2);
运行效果:
markdown
一维行数组:
1 2 3 4 5
一维列数组1:
10
20
30
一维列数组2:
40
50
60
示例2:创建二维矩阵
matlab
% 创建2行3列矩阵
mat = [1 2 3; 4 5 6];
disp('2行3列矩阵:');
disp(mat);
% 创建空数组(特殊场景用)
empty_arr = [];
disp('空数组维度:');
disp(size(empty_arr)); % 输出[],表示空维度
运行效果:
css
2行3列矩阵:
1 2 3
4 5 6
空数组维度:
[]
3. 注意事项
- 同一行的元素数量必须一致,否则会报错(如
[1 2; 3]非法); - 支持混合数值类型,但会自动统一为精度更高的类型(如整数+小数→全部为小数);
- 可通过
size(数组名)查看数组维度,length(数组名)查看一维数组长度。
二、linspace()函数:等间距数值数组创建
linspace()专门用于创建指定长度、等间距的一维数组,无需计算步长,是工程计算中生成等间隔序列的首选方法。
1. 基本语法
matlab
% 基础用法:生成从start到end的n个等间距元素
数组 = linspace(start, end, n);
% 简化用法:默认生成100个等间距元素
数组 = linspace(start, end);
参数说明:
start:起始值(必选);end:终止值(必选);n:元素个数(可选,默认100,必须为正整数)。
2. 实战示例
示例1:基础等间距数组
matlab
% 生成0到10之间的5个等间距数
arr1 = linspace(0, 10, 5);
disp('0到10的5个等间距数:');
disp(arr1);
% 省略n,默认生成100个元素
arr2 = linspace(1, 2);
disp('1到2的默认等间距数(前5个):');
disp(arr2(1:5)); % 只显示前5个元素
运行效果:
markdown
0到10的5个等间距数:
0 2.5000 5.0000 7.5000 10.0000
1到2的默认等间距数(前5个):
1.0000 1.0101 1.0202 1.0303 1.0404
示例2:生成角度序列(工程常用)
matlab
% 生成0到2π的100个等间距角度(用于绘制正弦曲线)
theta = linspace(0, 2*pi, 100);
y = sin(theta); % 计算正弦值
disp('角度序列前3个值:');
disp(theta(1:3));
disp('对应正弦值前3个:');
disp(y(1:3));
运行效果:
markdown
角度序列前3个值:
0 0.0635 0.1269
对应正弦值前3个:
0 0.0634 0.1266
3. 核心优势
- 无需手动计算步长(步长自动为
(end-start)/(n-1)); - 终止值
end一定会包含在数组中(区别于:创建数组); - 适合需要固定元素个数的等间距序列场景。
三、zeros()/ones()函数:全0/全1数组创建
zeros()和ones()是创建全0、全1数组的专用函数,广泛用于初始化矩阵、占位符定义等场景,比直接赋值更高效。
1. 基本语法
matlab
% zeros():创建全0数组
全0数组 = zeros(n); % n×n的二维全0矩阵
全0数组 = zeros(m, n); % m×n的二维全0矩阵
全0数组 = zeros(m, n, k); % m×n×k的三维全0数组
% ones():创建全1数组(语法与zeros完全一致)
全1数组 = ones(n);
全1数组 = ones(m, n);
全1数组 = ones(m, n, k);
2. 实战示例
示例1:二维全0/全1矩阵
matlab
% 创建3×3全0矩阵
zero_mat = zeros(3);
disp('3×3全0矩阵:');
disp(zero_mat);
% 创建2×4全1矩阵
one_mat = ones(2, 4);
disp('2×4全1矩阵:');
disp(one_mat);
运行效果:
markdown
3×3全0矩阵:
0 0 0
0 0 0
0 0 0
2×4全1矩阵:
1 1 1 1
1 1 1 1
示例2:三维数组与数组初始化
matlab
% 创建2×3×2的三维全0数组
zero_3d = zeros(2, 3, 2);
disp('三维全0数组维度:');
disp(size(zero_3d)); % 输出2 3 2
% 实战:初始化数组后赋值(工程常用)
data = zeros(1, 10); % 先创建1×10全0数组
for i = 1:10
data(i) = i^2; % 逐个赋值
end
disp('初始化后赋值的数组:');
disp(data);
运行效果:
markdown
三维全0数组维度:
2 3 2
初始化后赋值的数组:
1 4 9 16 25 36 49 64 81 100
3. 应用场景
zeros():初始化待填充数据的数组、创建空矩阵占位符、清零操作;ones():创建单位权重矩阵、统一缩放系数数组、初始化全1基准数组。
四、rand()/randn()函数:随机数组创建
MATLAB提供rand()(均匀分布)和randn()(正态分布)两个函数生成随机数组,用于仿真、模拟、随机抽样等场景。
1. 基本语法
matlab
% rand():生成0~1之间均匀分布的随机数数组
随机数组 = rand(n); % n×n均匀分布随机矩阵
随机数组 = rand(m, n); % m×n均匀分布随机矩阵
% randn():生成均值为0、方差为1的标准正态分布随机数数组
随机数组 = randn(n);
随机数组 = randn(m, n);
2. 实战示例
示例1:均匀分布随机数组
matlab
% 创建2×3的0~1均匀分布随机矩阵
rand_mat = rand(2, 3);
disp('0~1均匀分布随机矩阵:');
disp(rand_mat);
% 生成10~20之间的均匀分布随机数(缩放+平移)
rand_scaled = 10 + 10*rand(1, 5); % 公式:a + (b-a)*rand()
disp('10~20均匀分布随机数:');
disp(rand_scaled);
运行效果(随机数每次运行不同):
markdown
0~1均匀分布随机矩阵:
0.8147 0.1270 0.6324
0.9058 0.9134 0.0975
10~20均匀分布随机数:
19.1579 17.9221 19.5949 16.5574 10.3571
示例2:正态分布随机数组
matlab
% 创建3×2的标准正态分布随机矩阵
randn_mat = randn(3, 2);
disp('标准正态分布随机矩阵:');
disp(randn_mat);
% 生成均值为5、方差为2的正态分布随机数(缩放+平移)
mu = 5; % 均值
sigma = 2; % 标准差(方差=σ²)
randn_scaled = mu + sigma*randn(1, 5);
disp('均值5、标准差2的正态分布随机数:');
disp(randn_scaled);
运行效果(随机数每次运行不同):
标准正态分布随机矩阵:
0.5377 -1.3077
1.8339 -0.4336
-2.2588 0.3426
均值5、标准差2的正态分布随机数:
6.5755 3.5129 6.5748 4.4495 6.0349
3. 注意事项
rand()生成的随机数范围是左闭右开(0 ≤ x < 1);- 如需固定随机数种子(复现结果),可使用
rng(数值)(如rng(1)); randn()生成的随机数理论上无范围限制,大部分集中在-3~3之间。
五、常用数组创建方法对比与场景选择
| 方法/函数 | 核心特点 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|---|
| 直接赋值 | 自定义元素值 | 已知具体元素的小数组、特殊结构矩阵 | 灵活、直观 | 元素多时代码繁琐 |
| linspace() | 等间距、固定元素个数 | 生成等间隔序列(如角度、时间轴) | 无需计算步长,终止值必包含 | 仅生成一维数组 |
| zeros() | 全0数组 | 数组初始化、占位符、清零操作 | 高效、语法简洁 | 仅生成全0数组 |
| ones() | 全1数组 | 权重矩阵、基准数组、统一缩放 | 高效、语法简洁 | 仅生成全1数组 |
| rand() | 0~1均匀分布随机数 | 仿真、随机抽样、模拟实验 | 分布均匀,可控范围 | 需缩放平移才能调整数值范围 |
| randn() | 标准正态分布随机数 | 噪声模拟、自然现象仿真 | 符合现实随机规律 | 数值范围不可控 |
选择建议:
- 已知具体元素 → 直接赋值;
- 等间距序列+固定个数 → linspace();
- 初始化空数组 → zeros();
- 随机数模拟(均匀)→ rand();
- 随机数模拟(正态)→ randn()。
六、实战案例:综合创建与应用
以下案例实现"创建基础数组 → 数值计算 → 结果输出"的完整流程:
matlab
% 1. 创建基础数组
% 直接赋值创建成绩矩阵(3个学生,4门科目)
score_mat = [85 92 78 90; 76 88 95 82; 91 84 89 79];
% linspace生成0~10的时间轴
time = linspace(0, 10, 5);
% zeros初始化结果数组
result = zeros(3, 1);
% 2. 计算每个学生的平均分
for i = 1:3
result(i) = mean(score_mat(i,:)); % 按行计算均值
end
% 3. 生成随机加分(0~2分均匀分布)
add_score = rand(3, 1)*2;
final_score = result + add_score;
% 4. 输出结果
disp('学生原始平均分:');
disp(result);
disp('随机加分:');
disp(add_score);
disp('最终平均分(保留1位小数):');
fprintf('%.1f\t%.1f\t%.1f\n', final_score);
运行效果(随机加分每次不同):
markdown
学生原始平均分:
86.2500
85.2500
85.7500
随机加分:
1.6297
1.8559
0.5395
最终平均分(保留1位小数):
87.9 87.1 86.3