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
相关推荐
吃好睡好便好20 小时前
在Matlab中绘制三维等高线图
开发语言·python·学习·算法·matlab·信息可视化
Aaron158821 小时前
RFSOC+VU13P/VU9P+GPU多通道同步一体化解决方案
人工智能·嵌入式硬件·算法·matlab·fpga开发·硬件架构·基带工程
Evand J1 天前
【MATLAB】多无人机编队协同控制与三维航迹规划仿真。障碍物斥力避障,输出编队误差、控制输入、三维轨迹等
开发语言·matlab·无人机
青春不败 177-3266-05201 天前
MATLAB 2024b深度学习新特性全面解析与DeepSeek大模型集成开发
人工智能·深度学习·机器学习·matlab·卷积神经网络·自编码器·deepseek
吃好睡好便好1 天前
Matlab中三种三维图的对比
开发语言·人工智能·学习·算法·matlab·信息可视化
Evand J1 天前
【MATLAB例程】5个UAV 分布式围捕编队运动仿真 —— 基于PID控制
开发语言·分布式·matlab
吃好睡好便好1 天前
在Matlab中绘制二维等高线图
开发语言·人工智能·学习·算法·matlab
2zcode1 天前
基于Matlab元胞自动机模拟(CA)动态再结晶过程
开发语言·matlab·动态再结晶
yong99902 天前
MATLAB仿真计算电磁波回波信号的技术路径与实现指南
开发语言·matlab
吃好睡好便好2 天前
在Matlab中用sphere( )函数绘制球面图
开发语言·前端·javascript·学习·算法·matlab·信息可视化