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,为排序后的元素在原数组中的位置。