MATLAB数组创建完全教程:直接赋值/linspace/zeros/ones/rand函数用法与实战

数组是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
相关推荐
3GPP仿真实验室4 小时前
【Matlab源码】6G候选波形:OFDM-IM 增强仿真平台 DM、CI
开发语言·matlab·ci/cd
rit84324997 小时前
MATLAB中Teager能量算子提取与解调信号的实现
开发语言·matlab
我找到地球的支点啦8 小时前
通信扩展——扩频技术(超级详细,附带Matlab代码)
开发语言·matlab
Dev7z20 小时前
基于 MATLAB 的铣削切削力建模与仿真
开发语言·matlab
fengfuyao9851 天前
基于MATLAB的表面织构油润滑轴承故障频率提取(改进VMD算法)
人工智能·算法·matlab
机器学习之心1 天前
基于随机森林模型的轴承剩余寿命预测MATLAB实现!
算法·随机森林·matlab
rit84324991 天前
基于MATLAB的环境障碍模型构建与蚁群算法路径规划实现
开发语言·算法·matlab
hoiii1871 天前
MATLAB SGM(半全局匹配)算法实现
前端·算法·matlab
yong99901 天前
MATLAB面波频散曲线反演程序
开发语言·算法·matlab
yugi9878381 天前
基于MATLAB的一键式EMD、EEMD、CEEMD和SSA信号去噪实现
开发语言·matlab·信号去噪