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(:, :, 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-D阵列的置换尺寸
    permute 重新排列N-D阵列的尺寸
    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
    
  • 单元数组

    单元格数组是索引单元格的数组,其中每个单元格可以存储不同维度和数据类型的数组。
    所述细胞功能是用于创建单元数组。单元格函数的语法是-
    
    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