当前位置: 首页 > 文档资料 > MATLAB 中文教程 >

Arrays

优质
小牛编辑
126浏览
2023-12-01

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 square是一个正方形,当它的元素按行,列或对角添加时,它产生相同的总和。

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

Where,

  • B是创建的新数组

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

  • dim是连接数组的维度

例子 (Example)

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

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

Array 函数

MATLAB提供以下功能来排序,旋转,置换,重塑或移位数组内容。

功能目的
length矢量长度或最大阵列尺寸
ndims数组维数
numel数组元素的数量
size数组尺寸
iscolumn确定输入是否为列向量
isempty确定数组是否为空
ismatrix确定输入是否为矩阵
isrow确定输入是否为行向量
isscalar确定输入是否是标量
isvector确定输入是否为矢量
blkdiag根据输入参数构造块对角矩阵
circshift循环移位阵列
ctranspose复共轭转置
diag矩阵的对角矩阵和对角线
flipdim沿指定维度翻转数组
fliplr从左到右翻转矩阵
flipud将矩阵翻转到最低点
ipermute逆变换ND阵列的尺寸
permute重新排列ND阵列的尺寸
repmat复制和平铺数组
reshape重塑阵列
rot90将矩阵旋转90度
shiftdim换档尺寸
issorted确定集合元素是否按排序顺序排列
sort按升序或降序对数组元素进行排序
sortrows按升序对行进行排序
squeeze删除单个尺寸
transposeTranspose
vectorize矢量化表达

例子 (Examples)

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

Length, Dimension and Number of elements −

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

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

Circular Shifting of the Array Elements −

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

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)

Where,

  • C是单元阵列;

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

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

  • obj是以下之一 -

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

例子 (Example)

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

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