- MATLAB矩陣分析和計算
- 杜樹春
- 2243字
- 2019-11-15 20:41:57
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,為排序后的元素在原數組中的位置。