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 提供以下函数来对数组内容进行排序、旋转、排列、重塑或移位。

功能 目的
长度 向量的长度或最大数组维度
恩迪姆斯 数组维数
努梅尔 数组元素数量
尺寸 数组维度
等列 判断输入是否为列向量
是空的 判断数组是否为空
矩阵 判断输入是否为矩阵
伊斯罗 判断输入是否为行向量
是标量 确定输入是否为标量
向量 判断输入是否为向量
块诊断 从输入参数构造块对角矩阵
周移 循环移动数组
转置 复共轭转置
诊断 对角矩阵和矩阵对角线
弗莱迪姆 沿指定维度翻转数组
飞利浦 从左到右翻转矩阵
菲利普德 将矩阵上下翻转
ipermute ND 数组的逆排列维度
排列 重新排列 ND 阵列的尺寸
雷普马特 重复和平铺数组
重塑 重塑数组
罗特90 将矩阵旋转 90 度
移暗 移动尺寸
杂七杂八的 确定集合元素是否按排序顺序
种类 按升序或降序对数组元素进行排序
排序行 按升序对行进行排序
删除单一维度
转置 转置
矢量化 矢量化表达

例子

以下示例说明了上面提到的一些功能。

长度、尺寸和元件数量 -

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

x = [7.1, 3.4, 7.2, 28/4, 3.6, 17, 9.4, 8.9];
length(x)      % length of x vector
y = rand(3, 4, 5, 2);
ndims(y)       % no of dimensions in array y
s = ['Zara', 'Nuha', 'Shamim', 'Riz', 'Shadab'];
numel(s)       % no of elements in s

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

ans =  8
ans =  4
ans =  23

数组元素的循环移位 -

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

a = [1 2 3; 4 5 6; 7 8 9]  % the original array a
b = circshift(a,1)         %  circular shift first dimension values down by 1.
c = circshift(a,[1 -1])    % circular shift first dimension values % down by 1 
                           % and second dimension values to the left % by 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]  % horizontal vector
sort(v)                      % sorting v
m = [2 6 4; 5 3 9; 2 0 1]    % two dimensional array
sort(m, 1)                   % sorting m along the row
sort(m, 2)                   % sorting m along the column

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

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