官术网_书友最值得收藏!

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,為排序后的元素在原數組中的位置。

主站蜘蛛池模板: 丹东市| 女性| 措勤县| 建宁县| 东莞市| 资中县| 南投市| 庄河市| 和林格尔县| 武宣县| 都兰县| 长顺县| 余姚市| 滦平县| 安顺市| 荆州市| 临安市| 凌源市| 静海县| 海口市| 青浦区| 蒙自县| 来安县| 华蓥市| 阿拉善左旗| 安平县| 桐柏县| 临洮县| 南昌市| 尉犁县| 建德市| 拜泉县| 南平市| 辽阳市| 信阳市| 平昌县| 泸州市| 延庆县| 桐乡市| 惠安县| 丰城市|