MATLAB - 数组

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

我们已经讨论过向量和矩阵。 在本章中,我们将讨论多维数组。 不过,在此之前,让我们先讨论一些特殊类型的数组。

MATLAB 中的特殊数组

在本节中,我们将讨论一些创建特殊数组的函数。 对于所有这些函数,单个参数创建方形数组,双参数创建矩形数组。

zeros()函数创建一个全零的数组 −

例如 −

zeros(5)

MATLAB 将执行上述语句并返回以下结果 −

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() 函数创建一个全为 1 的数组 −

例如 −

ones(4,3)

MATLAB 将执行上述语句并返回以下结果 −

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

eye()函数创建一个单位矩阵。

例如 −

eye(4)

MATLAB 将执行上述语句并返回以下结果 −

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

rand() 函数在 (0,1) 上创建均匀分布的随机数数组 −

例如 −

rand(3, 5)

MATLAB 将执行上述语句并返回以下结果 −

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)

MATLAB 将执行上述语句并返回以下结果 −

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

多维数组

在 MATLAB 中,二维以上的数组称为多维数组。 MATLAB 中的多维数组是普通二维矩阵的扩展。

一般要生成多维数组,我们首先创建一个二维数组并对其进行扩展。

例如,我们创建一个二维数组a。

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

MATLAB 将执行上述语句并返回以下结果 −

a =
   7     9     5
   6     1     9
   4     3     2

数组a是一个3×3数组; 我们可以通过提供如下值来向 a 添加第三个维度 −

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

MATLAB 将执行上述语句并返回以下结果 −

a =

ans(:,:,1) =

   0   0   0
   0   0   0
   0   0   0

ans(:,:,2) =

   1   2   3
   4   5   6
   7   8   9

我们还可以使用ones()、zeros() 或rand() 函数创建多维数组。

例如,

b = rand(4,3,2)

MATLAB 将执行上述语句并返回以下结果 −

b(:,:,1) =
   0.0344    0.7952    0.6463
   0.4387    0.1869    0.7094
   0.3816    0.4898    0.7547
   0.7655    0.4456    0.2760

b(:,:,2) =
   0.6797    0.4984    0.2238
   0.6551    0.9597    0.7513
   0.1626    0.3404    0.2551
   0.1190    0.5853    0.5060

我们还可以使用cat()函数来构建多维数组。 它沿指定维度连接数组列表 −

cat() 函数的语法是 −

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

其中,

  • B 是创建的新数组

  • A1, A2, ... 是要连接的数组

  • dim 是连接数组的维度

示例

创建一个脚本文件并在其中键入以下代码 −

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])

当您运行该文件时,它会显示 −

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 上下翻转矩阵
ipermute N 维数组的逆排列维度
permute 重新排列 N 维数组的维度
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]  % 原始数组a
b = circshift(a,1)         %  将第一维值向下循环移动 1。
c = circshift(a,[1 -1])    % 将第一维值循环平移 % 向下 1
                           % 第二个维度值向左 % 增加 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

Sorting Arrays

创建一个脚本文件并在其中键入以下代码 −

v = [ 23 45 12 9 5 0 19 17]  % 水平向量
sort(v)                      % 排序v
m = [2 6 4; 5 3 9; 2 0 1]    % 二维数组
sort(m, 1)                   % 沿行对 m 进行排序
sort(m, 2)                   % 沿列对 m 进行排序

当您运行该文件时,它会显示以下结果 −

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 是单元格数组;

  • dim 是标量整数或整数向量,指定单元格数组 C 的维度;

  • dim1, ... , dimN 是指定 C 维度的标量整数;

  • obj 是以下之一 −

    • Java 数组或对象
    • System.String 或 System.Object 类型的 .NET 数组

示例

创建一个脚本文件并在其中键入以下代码 −

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)

MATLAB 将执行上述语句并返回以下结果 −

ans = 
{
   [1,1] = Red
   [2,1] =  1
   [1,2] = Blue
   [2,2] =  2
}

您还可以通过使用大括号进行索引来访问单元格的内容。

例如 −

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

MATLAB 将执行上述语句并返回以下结果 −

ans = Blue
ans = Green
ans = Yellow