📜  MATLAB-数组

📅  最后修改于: 2020-11-03 09:49:08             🧑  作者: Mango


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是3 x 3数组;我们可以添加第三维,通过提供类似的价值观-

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提供以下功能来对数组内容进行排序,旋转,置换,整形或移位。

Function Purpose
length Length of vector or largest array dimension
ndims Number of array dimensions
numel Number of array elements
size Array dimensions
iscolumn Determines whether input is column vector
isempty Determines whether array is empty
ismatrix Determines whether input is matrix
isrow Determines whether input is row vector
isscalar Determines whether input is scalar
isvector Determines whether input is vector
blkdiag Constructs block diagonal matrix from input arguments
circshift Shifts array circularly
ctranspose Complex conjugate transpose
diag Diagonal matrices and diagonals of matrix
flipdim Flips array along specified dimension
fliplr Flips matrix from left to right
flipud Flips matrix up to down
ipermute Inverses permute dimensions of N-D array
permute Rearranges dimensions of N-D array
repmat Replicates and tile array
reshape Reshapes array
rot90 Rotates matrix 90 degrees
shiftdim Shifts dimensions
issorted Determines whether set elements are in sorted order
sort Sorts array elements in ascending or descending order
sortrows Sorts rows in ascending order
squeeze Removes singleton dimensions
transpose Transpose
vectorize Vectorizes expression

例子

以下示例说明了上述某些功能。

元素的长度,尺寸和数量-

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

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

单元阵列

单元格数组是索引单元格的数组,其中每个单元格可以存储不同维度和数据类型的数组。

单元函数用于创建单元阵列。单元格函数的语法是-

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