Matlab使用size函数获取目标数组的尺寸

今天,给大家带来Matlab中比较常用的size函数,size函数用于获取数组、矩阵等的尺寸,即获取数组的行数、列数等尺寸。我们不仅可以单独获取矩阵的行数,列数,也可以同时输出矩阵的行数及列数。本文,主要讲解Matlab中size函数的常见用于、语法说明、四维数组的大小、表大小、使用单独的参数返回各个维度长度。

下面,我们首先给出Matlab中关于size函数的帮助文档如下:

>> help size
 size   Size of array.  
    D = size(X), for M-by-N matrix X, returns the two-element row vector
    D = [M,N] containing the number of rows and columns in the matrix.
    For N-D arrays, size(X) returns a 1-by-N vector of dimension lengths.
    Trailing singleton dimensions are ignored.
 
    [M,N] = size(X) for matrix X, returns the number of rows and columns in
    X as separate output variables. 
    
    [M1,M2,M3,...,MN] = size(X) for N>1 returns the sizes of the first N 
    dimensions of the array X.  If the number of output arguments N does
    not equal NDIMS(X), then for:
 
    N > NDIMS(X), size returns ones in the "extra" variables, i.e., outputs
                  NDIMS(X)+1 through N.
    N < NDIMS(X), MN contains the product of the sizes of dimensions N
                  through NDIMS(X).
 
    M = size(X,DIM) returns the length of the dimension specified
    by the scalar DIM.  For example, size(X,1) returns the number
    of rows. If DIM > NDIMS(X), M will be 1.
 
    When size is applied to a Java array, the number of rows
    returned is the length of the Java array and the number of columns
    is always 1.  When size is applied to a Java array of arrays, the
    result describes only the top level array in the array of arrays.
 
    Example:
    If
       X = rand(2,3,4);
    then
       d = size(X)              returns  d = [2 3 4]
       [m1,m2,m3,m4] = size(X)  returns  m1 = 2, m2 = 3, m3 = 4, m4 = 1
       [m,n] = size(X)          returns  m = 2, n = 12
       m2 = size(X,2)           returns  m2 = 3

常见用法

sz = size(A)
szdim = size(A,dim)
szdim = size(A,dim1,dim2,…,dimN)
[sz1,...,szN] = size(___)

语法说明

sz = size(A) 返回一个行向量,其元素是 A 的相应维度的长度。例如,如果 A 是一个 3×4 矩阵,则 size(A) 返回向量 [3 4]。

如果 A 是表或时间表,则 size(A) 返回由表中的行数和变量数组成的二元素行向量。

当 dim 为正整数标量时,szdim = size(A,dim) 返回维度 dim 的长度。从 R2019b 开始,您还可以将 dim 指定为正整数向量,以一次查询多个维度长度。例如,size(A,[2 3]) 以 1×2 行向量 szdim 形式返回 A 的第二个维度和第三个维度的长度。

szdim = size(A,dim1,dim2,…,dimN) 以行向量 szdim 形式返回维度 dim1,dim2,…,dimN 的长度(从 R2019b 开始)。

[sz1,…,szN] = size(_) 分别返回 A 的查询维度的长度。

四维数组的大小

创建一个随机四维数组并返回其大小。

A = rand(2,3,4,5);
sz = size(A)

输出结果如下:

sz =

     2     3     4     5

仅查询 A 的第二个维度的长度。

szdim2 = size(A,2)

输出结果如下:

szdim2 =

     3

从 R2019b 开始,您可以通过指定向量维度参数,一次查询多个维度长度。例如,求 A 的第一个维度和第三个维度的长度。

szdim13 = size(A,[1 3])

由于我这里用的是Matlab 2016,不支持这种写法。以上代码的输出结果如下:

szdim13 = 

     2     4

当然,如果是2016版本,我们可以分开写,代码如下:

>> sidim1 = size(A,1)

sidim1 =

     2

>> sidim2 = size(A,3)

sidim2 =

     4

求 A 的第二个维度至第四个维度的长度。

szdim23 = size(A,2:4)

当然,这个写法在Matlab 2016中依旧不支持,不过还是可以单独从2到4单独求一下size。

szdim23 = 

     3     4     5

您也可以使用单独的输入参数列出查询的各个维度。当然,这种Matlab 2016也不支持

szdim23 = size(A,2,3,4);

Matlab 2016版本只支持以下这种写法:

>> sidim2 = size(A,2)

sidim2 =

     3

>> sidim3 = size(A,3)

sidim3 =

     4

>> sidim4 = size(A,4)

sidim4 =

     5

表大小

创建一个包含 5 行和 4 个变量的表。

LastName = {'Smith';'Johnson';'Williams';'Jones';'Brown'};
Age = [38;43;38;40;49];
Height = [71;69;64;67;64];
Weight = [176;163;131;133;119];
BloodPressure = [124 93; 109 77; 125 83; 117 75; 122 80];

A = table(Age,Height,Weight,BloodPressure,'RowNames',LastName)

输出如下结果:

A = 

                Age    Height    Weight    BloodPressure
                ___    ______    ______    _____________

    Smith       38     71        176       124     93   
    Johnson     43     69        163       109     77   
    Williams    38     64        131       125     83   
    Jones       40     67        133       117     75   
    Brown       49     64        119       122     80  

计算该表的大小。尽管 BloodPressure 变量包含两列,但 size 只计算变量数。

sz = size(A)
>> sz = size(A)

sz =

     5     4

使用单独的参数返回各个维度长度

创建一个随机矩阵,并分别返回行数和列数。

A = rand(4,3);
[numRows,numCols] = size(A)

输出结果如下:

numRows =

     4


numCols =

     3

这可能也是最常用的方法了吧。

    © 版权声明
    THE END
    喜欢就支持一下吧
    点赞0分享
    评论 抢沙发

    请登录后发表评论

      暂无评论内容