• MATLAB数组


    MATLAB数组

    之前,我们讨论了很多关于MATLAB向量和矩阵的知识,在本章中,我们将讨论多维数组。在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
    

    MATLAB幻方

    产生相同的总和,当它的元素加入逐行,逐列或对角线幻方是一个正方形。

    使用 magic() 函数创建一个幻方阵列,它需要一个单数的参数,该参数必须是一个大于或等于3的标量。

    例如:

    magic(4)

    MATLAB执行上述语句,返回以下结果:

    ans =
        16     2     3    13
         5    11    10     8
         9     7     6    12
         4    14    15     1
    

    MATLAB多维数组

    在MATLAB中,一个阵列如果具有两个以上的维度则被称为多维数组。

    在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(:, :, 2)= [ 1 2 3; 4 5 6; 7 8 9]

    MATLAB执行上述语句,返回以下结果:

    a(:,:,1) =
         7     9     5
         6     1     9
         4     3     2
    
    a(:,:,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 是一起串联阵列的维度。

    详细例子

    在MATLAB中建立一个脚本文件,输入下述代码:

    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数组函数

    MATLAB提供以下功能进行排序,旋转,置乱,重塑或移动数组的内容。

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

    详细示例

    上述的一些函数将由下列例子说明。

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

    在MATLAB中建立一个脚本文件,输入下述代码:

    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
    

    循环移位的数组元素:

    在MATLAB中建立一个脚本文件,输入下述代码:

    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
    

    MATLAB数组排序

    在MATLAB中建立一个脚本文件,输入下述代码:

    v = [ 23 45 12 9 5 0 19 17]  % horizonal 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
    

    MATLAB单元阵列

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

    单元格函数用于建立一个单元阵列。

    单元格函数的语法如下:

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

    注意

    • C 是单元阵列;

    • dim 是一个标量整数或整数向量,指定单元格阵列C的尺寸;

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

    • obj 是以下内容之一

      • Java 数组或对象

      • .NET阵列 System.String 类型或 System.Object

    详细例子

    在MATLAB中建立一个脚本文件,输入下述代码:

    c = cell(2, 5);
    c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5}

    运行该文件,显示以下结果:

    c = 
        'Red'    'Blue'    'Green'    'Yellow'    'White'
        [  1]    [   2]    [    3]    [     4]    [    5]
    

    MATLAB在单元格上阵列访问数据

    使用两种方法来引用单元阵列的元素:

    • 封闭的索引在第一个 bracket (),是指一组单元格

    • 封闭的在大括号{},的索引单个单元格内的数据

    括在第一支架的索引,它指的是单元格的集。

    单元阵列索引平稳括号单元格集合。

    例如:

    c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5};
    c(1:2,1:2)

    MATLAB执行上述语句,返回以下结果:

    ans = 
        'Red'    'Blue'
        [  1]    [   2]
    

    同样可以用花括号“{ }”索引访问单元格的内容。

    例如:

    c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5};
    c{1, 2:4}

    MATLAB执行上述语句,返回以下结果:

    ans =
       Blue
    ans =
       Green
    ans =
       Yellow
  • 相关阅读:
    Complete Partition Of Array
    读书 | 设计模式之禅 - 责任链模式
    OpenHarmony应用分发运营体系
    【JavaScript--React】本篇文章将带你体验不同于vue框架的eact框架
    02-`Linux`的基本命令
    【如何看待Unity收费】对标中小公司的待就业者的该如何做
    自适应分组多级并发框架
    WebUtils
    优化改进YOLOv5算法之感受野注意力卷积运算(RFAConv),效果秒杀CBAM和CA等
    Java项目:ssm大学生兼职论坛
  • 原文地址:https://blog.csdn.net/std86021/article/details/127993159