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

例如 -

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 是一个 3x3 数组;我们可以通过提供如下值来为 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 是创建的新数组

  • A1A2、... 是要连接的数组

  • 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)      % 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 函数用于创建元胞数组。cell 函数的语法为 -

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

其中,

  • C 是元胞数组;

  • dim 是一个标量整数或整数向量,它指定元胞数组 C 的维度;

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

  • obj 是以下之一 -

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

示例

创建一个脚本文件,并将以下代码键入其中 -

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
广告