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
相关推荐
逆小舟2 小时前
【matlab】simulink实践经验(12.3)
开发语言·matlab
科技观察2 小时前
国产MATLAB替代软件的关键能力与生态发展现状
大数据·人工智能·matlab
Dev7z3 小时前
基于MATLAB小波变换的音频水印算法研究与实现
开发语言·matlab·音视频
cici158744 小时前
MATLAB/Simulink单相光伏并网逆变器仿真
开发语言·matlab
Dev7z4 小时前
基于MATLAB小波分析的图像增强算法及其仿真实现
开发语言·matlab
机器学习之心4 小时前
MATLAB基于极差法和灰色关联分析的40Cr零件内孔珩磨参数优化
matlab·灰色关联分析
aini_lovee5 小时前
基于UERD算法的JPEG图像隐写MATLAB实现
开发语言·算法·matlab
Dev7z7 小时前
基于MATLAB的风向和天气条件下污染物扩散模拟与可视化系统
人工智能·算法·matlab
tyatyatya16 小时前
MATLAB基础数据类型教程:数值型/字符型/逻辑型/结构体/元胞数组全解析
开发语言·matlab