亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> MATLAB

MATLAB 多维数组与特殊数组完全指南

在 MATLAB 中,所有数据类型的变量本质上都是多维数组。向量是一维数组,矩阵是二维数组。

我们已经讨论过向量和矩阵。本章将重点介绍多维数组,但在此之前,先来了解几种特殊的数组类型。

MATLAB 中的特殊数组

本节介绍用于创建特殊数组的函数。这些函数均支持单参数生成方阵、双参数生成矩形数组。

zeros() 函数创建全零数组:

示例:

zeros(5)

MATLAB 执行后返回 5×5 的全零矩阵:

ans = 
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0

ones() 函数创建全一数组:

示例:

ones(4,3)

返回 4 行 3 列的全一矩阵:

ans = 
     1     1     1
     1     1     1
     1     1     1
     1     1     1

eye() 函数创建单位矩阵(对角线为 1,其余为 0)。

示例:

eye(4)

返回 4×4 单位矩阵:

ans = 
     1     0     0     0
     0     1     0     0
     0     0     1     0
     0     0     0     1

rand() 函数生成 (0,1) 区间上均匀分布的随机数数组。

示例:

rand(3, 5)

返回 3 行 5 列的随机矩阵:

ans = 
    0.8147    0.9134    0.2785    0.9649    0.9572
    0.9058    0.6324    0.5469    0.1576    0.4854
    0.1270    0.0975    0.9575    0.9706    0.8003

幻方

幻方 是一种方阵,其每行、每列及两条主对角线上元素之和相等。

magic() 函数生成幻方,参数为方阵阶数(标量且 ≥3)。

magic(4)

返回 4 阶幻方:

ans = 
    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1

多维数组

维度超过二维的数组称为多维数组,是二维矩阵的自然扩展。

通常先生成二维数组,再扩展为多维。例如,先创建 3×3 矩阵 a:

a = [7 9 5; 6 1 9; 4 3 2]

结果:

a = 
     7     9     5
     6     1     9
     4     3     2

通过指定第三维数据扩展 a:

a(:, :, 2) = [1 2 3; 4 5 6; 7 8 9]

得到 3×3×2 的三维数组:

a(:,:,1) = 
     7     9     5
     6     1     9
     4     3     2
a(:,:,2) = 
     1     2     3
     4     5     6
     7     8     9

也可用 ones()、zeros()、rand() 直接创建多维数组:

b = rand(4,3,2)

生成 4×3×2 的随机三维数组。

还可用 cat() 函数沿指定维度拼接数组:

B = cat(dim, A1, A2...)

示例

a = [9 8 7; 6 5 4; 3 2 1];
b = [1 2 3; 4 5 6; 7 8 9];
c = cat(3, a, b, [2 3 1; 4 7 8; 3 9 0])

结果为 3×3×3 数组:

c(:,:,1) = 
     9     8     7
     6     5     4
     3     2     1
c(:,:,2) = 
     1     2     3
     4     5     6
     7     8     9
c(:,:,3) = 
     2     3     1
     4     7     8
     3     9     0

数组操作函数

MATLAB 提供丰富的函数对数组进行排序、旋转、维度变换、重塑、移位等操作:

函数用途
length向量长度或最大数组维度
ndims数组维度数
numel数组元素总数
size数组各维度大小
iscolumn判断是否为列向量
isempty判断数组是否为空
ismatrix判断是否为矩阵
isrow判断是否为行向量
isscalar判断是否为标量
isvector判断是否为向量
blkdiag构造分块对角矩阵
circshift循环移位数组
ctranspose共轭转置
diag对角矩阵或提取对角线
flipdim沿指定维翻转数组
fliplr左右翻转矩阵
flipud上下翻转矩阵
ipermuteN-D 数组维度逆排列
permute重排 N-D 数组维度
repmat复制平铺数组
reshape重塑数组形状
rot90矩阵逆时针旋转 90°
shiftdim移动数组维度
issorted判断元素是否已排序
sort数组元素升序/降序排序
sortrows按行排序
squeeze移除单例维度
transpose转置
vectorize表达式向量化

示例

长度、维度与元素数

x = [7.1, 3.4, 7.2, 28/4, 3.6, 17, 9.4, 8.9];
length(x)  % 向量 x 的长度
y = rand(3, 4, 5, 2);
ndims(y)   % 数组 y 的维度数
s = ['Zara', 'Nuha', 'Shamim', 'Riz', 'Shadab'];
numel(s)   % 字符数组 s 的元素数

输出:

ans = 8
ans = 4
ans = 23

数组元素循环移位

a = [1 2 3; 4 5 6; 7 8 9];
b = circshift(a,1);        % 第 1 维向下移 1
c = circshift(a,[1 -1]);   % 第 1 维下移 1,第 2 维左移 1

结果:

a = 
     1     2     3
     4     5     6
     7     8     9
b = 
     7     8     9
     1     2     3
     4     5     6
c = 
     8     9     7
     2     3     1
     5     6     4

数组排序

v = [23 45 12 9 5 0 19 17];
sort(v)                    % 向量排序
m = [2 6 4; 5 3 9; 2 0 1];
sort(m, 1)                 % 沿第 1 维(行方向)排序
sort(m, 2)                 % 沿第 2 维(列方向)排序

输出:

v = 23 45 12 9 5 0 19 17
ans = 0 5 9 12 17 19 23 45
m = 2 6 4; 5 3 9; 2 0 1
ans = 2 0 1; 2 3 4; 5 6 9
ans = 2 4 6; 3 5 9; 0 1 2

元胞数组

元胞数组由索引元胞组成,每个元胞可存储不同维度和数据类型的数组。

cell 函数用于创建元胞数组:

C = cell(dim)
C = cell(dim1,...,dimN)
D = cell(obj)

示例

c = cell(2, 5);
c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5}

显示结果:

c = 
  [1,1] = Red      [2,1] = 1
  [1,2] = Blue     [2,2] = 2
  [1,3] = Green    [2,3] = 3
  [1,4] = Yellow   [2,4] = 4
  [1,5] = White    [2,5] = 5

访问元胞数组数据

两种索引方式:

圆括号示例:

c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5};
c(1:2,1:2)
ans = 
  [1,1] = Red      [2,1] = 1
  [1,2] = Blue     [2,2] = 2

花括号示例:

c{1, 2:4}
ans = Blue
ans = Green
ans = Yellow

MATLAB

  1. 掌握 C# 数组:声明、初始化与核心操作完全指南
  2. 掌握 C# 锯齿数组:声明、初始化与访问完全指南
  3. 掌握 C++ 数组:声明、初始化、访问与实战操作全指南
  4. C++ 数组完全指南:声明、初始化、多维数组与指针技巧
  5. C++ 动态数组分配实战指南:new/delete、初始化、扩容与内存管理
  6. MATLAB 入门指南:矩阵实验室的核心能力与应用领域全景
  7. MATLAB 变量深度解析:矩阵本质、赋值、多重赋值、查看与清理、长赋值、格式控制、向量创建
  8. MATLAB 常用命令速查:会话管理、系统操作、输入输出、矩阵数组、绘图可视化
  9. MATLAB 矩阵核心操作:创建、索引引用、子矩阵提取、行列删除、拼接与基本运算
  10. MATLAB 数值类型详解:存储、转换与范围查询
  11. MATLAB 字符串完全指南:创建、拼接、元胞数组与常用函数
  12. Java 数组复制技术:全面指南