MATLAB矩阵分析和计算
上QQ阅读APP看书,第一时间看更新

4.12 数组信息的获取

下面介绍如何获取数组的信息,包括数组的大小、数组的维度、数组类型、内存占用,以及数组的元素查询和排序等。

1. 数组结构

MATLAB提供很多函数对数组的结构进行测试,这些函数主要有:

•函数isempty(A)——该函数检测数组A是否为空,如果为空,则返回值为1;否则,返回值为0。

•函数isscalar(A)——该函数检测数组A是否为单个元素的标量,如果size(A)=[1 1],即A为单个元素,则该函数返回值为1;否则,返回值为0。

•函数isvector(A)——该函数检测数组A是否为行向量或列向量,如果是行向量或列向量,则返回值为1;否则,返回值为0。

•函数isrow(A)——该函数检测数组A是否为列向量,如果是列向量,则返回值为1;否则,返回值为0。

•函数iscolum(A)——该函数检测数组A是否为行向量,如果是行向量,则返回值为1;否则,返回值为0。

•函数issparse(A)——该函数检测数组A是否为稀疏矩阵,如果A是稀疏矩阵,则返回值为1;否则,返回值为0。

【例4.18】 对数组A进行检测。

    clear all;
    A=[11 0 0 1 5]
    f1=isempty(A)          %数组A是否为空
    f2=isscalar(A)         %数组A是否为标量
    f3=isvector(A)         %数组A是否为向量
    f4=issparse(A)         %数组A是否为稀疏矩阵

运行后输出结果如下:

    A=

       11  0  0  1  5
    f1=
        0
    f2=
        0
    f3=
        1
    f4=
        0

对数组A的结构进行测试,如果为真,则返回值为1;否则,返回值为0。

2. 数组的大小

数组的大小是数组最常用的属性,表示数组在每一个方向上有多少元素。在MATLAB中,最常用的检测数组大小的函数是size()和length(),该函数的调用格式为:

•d=size(A)——该函数以向量的形式返回数组A的行数m和列数n,即d=[m,n]。

•[m,n]=size(A)——该函数返回数组A的行数m和列数n。

•函数length(A)用于返回一维数组的长度,如果是二维数组,则返回行数和列数中的较大者,即length(A)=max(size(A))。

【例4.19】 获取数组A的大小。

    clear all;
    A=[11 0 0 1 5]
    d=size(A)
    [m,n]=size(A)   %数组A的大小
    length(A)        %数组A的长度

运行后输出结果如下:

    A=

        11  0  0  1  5
    d=
         1  5
    m=

         1
    n=

         5
    ans=

         5

在程序中,通过函数size()获取数组的行和列,通过函数length()得到一维数组的长度。

3. 数组的维数

在MATLAB中,利用函数ndims()计算数组的维数,该函数的调用格式为:

N=ndims(A)——该函数返回数组的维数N。函数ndims(A)的返回结果等于length(size(A))。

【例4.20】 获取数组A的维数。

    clear all;
    A=[11 0 0 1 5]
    n1=ndims(A)        %数组A的维数
    a=5;
    n2=ndims(a)        %常数的维数

运行后输出结果如下:

    A=
        11  0  0  1  5
    n1=
         2
    n2=
         2

在程序中,利用函数ndims()计算数组的维数,一维数组的维数都为2。需要注意的是,标量(或常量)在MATLAB中看作是一行一列的数组,维数也是2。

4. 数组的数据类型

在MATLAB中,数组的元素可以是不同的数据类型,采用下面的函数对数组的类型进行测试。

•函数isnumeric()——该函数检测数组的元素是否为数值型,如果是数值型,则返回值为1;否则,返回值为0。数值型数据包括整数型和浮点型两类数据,后者又包括float和double。

•函数isreal(A)——该函数检测数组的元素是否为实数型,如果是实数型,则返回值为1;否则,返回值为0。

•函数isfloat(A)——该函数检测数组的元素是否为浮点型,如果是浮点型,则返回值为1;否则,返回值为0。

•函数isinteger(A)——该函数检测数组的元素是否为整型,如果是整型,则返回值为1;否则,返回值为0。

•函数islogical(A)——该函数检测数组的元素是否为逻辑型,如果是逻辑型,则返回值为1;否则,返回值为0。

•函数ischar(A)——该函数检测数组的元素是否为字符型,如果是字符型,则返回值为1;否则,返回值为0。

•函数isstruct(A)——该函数检测数组的元素是否为结构体型,如果是结构体型,则返回值为1;否则,返回值为0。

•函数iscell(A)——该函数检测数组的元素是否为元胞型,如果是元胞型,则返回值为1;否则,返回值为0。

【例4.21】 判断数组A和B的数据类型。

    clear all;
    A=[11 0 0 1 5]
    B=A > 5
    f1=isnumeric(A)  %是否为数值型
    f2=isreal(A)     %是否为实数型
    f3=isinteger(A)  %是否为整型
    f4=islogical(B)  %是否为逻辑型

运行后输出结果如下:

    A=
        11  0  0  1  5
    B=
         1  0  0  0  0
    f1=
         1
    f2=
         1
    f3=
         0
    f4=
         1

在程序中,对数组A和B的类型进行判断,数组A为数值型中的浮点类型(double),数组B为逻辑型(logical)。

【例4.22】 判断数组A和B的数据类型。

    A=[0.5 0 0 0.1 0.5]
    B=A < 5
    f1=isnumeric(A)      %是否为数值型
    f2=isreal(A)         %是否为实数型
    f3=isinteger(A)      %是否为整型
    f4= isfloat(A)       %是否为浮点型
    f5=ischar(A)         %是否为字符型
    f6=isstruct(A)       %是否为结构体型
    f7=iscell(A)         %是否为元胞型
    f8=islogical(B)      %是否为逻辑型

运行后输出结果如下:

由上可知,数组A不是整型、字符型、结构体型、元胞型,是数值型、实型、浮点型。数组B为逻辑型。

5. 数组的内存占用

在MATLAB中,可以通过函数whos来获取数组的大小以及占用多少内存。对于数组中不同的数据类型,占用的内存也不一样。

【例4.23】 了解数组的内存占用情况。

    clear all;
    A=[11 0 0 1 5]
    B=A > 0
    C=['a''b''c]'
    whos

运行后输出结果如下:

在MATLAB命令行中,使用函数whos可以查看所有变量的大小。在程序中,数组A的数据类型为double,包含5个元素,占用40字节(Bytes)。数组B的数据类型为logical,包含5个元素,占用5字节。数组C的类型为char,包含3个元素,占用6字节。

6. 数组的查找

在MATLAB中,数组元素的查找采用函数find(),返回关系表达式为真的元素的下标。可以利用该函数查找数组中特定的元素并进行修改,非常方便。

【例4.24】 对数组A中大于5的元素加100,等于5的元素加200。

    clear all;
    A=[10 9 6 1 5]
    find(A > 5)
    find(A==5)
    A(find(A > 5))=A(find(A > 5))+100
    A(A==5)=200

运行后输出结果如下:

    A=
        10      9      6      1      5
    ans=

         1      2      3
    ans=

         5
    A=

       110    109    106      1      5
    A=

       110    109    106      1    200

在程序中,利用函数find()查找数组的元素。函数find()的返回值为使表达式为真的元素的下标。数组A中大于5的元素加100,等于5的元素加200。

7. 数组的排序

在MATLAB中,数组的排序使用函数sort(),该函数默认按照升序排列,返回值为排列后的数组,与原数组维数相同。

【例4.25】 利用函数sort()对数组排序。

    clear all;
    A=[10 9 6 1 5]
    B=sort(A)
    [C,I]=sort(A,'ascend)'
    D=sort(A,'descend)'

运行后输出结果如下:

    A=

        10     9    6   1    5
    B=

         1     5    6   9   10
    C=

         1     5    6   9   10
    I=

         4     5    3   2    1
    D=
        10     9    6   5    1

在程序中,利用函数sort()对数组排序,默认为ascend,即按照升序排列;如果为descend,则按照降序排列。程序中的返回值1,为排序后的元素在原数组中的位置。