MATLAB基础及其应用教程
上QQ阅读APP看书,第一时间看更新

2.4.2 多维数组的创建

抛开运算法则,单从形式上讲,向量即是一种一维数组,而矩阵是一种二维数组。从这一理解出发,创建一维数组和二维数组的方法已经在前面两节讲过了。

因此,本小节只准备介绍3种三维以上数组的创建方法。它们分别是下标赋值法、工具阵函数法、拼接和变形函数法。

1.下标赋值法

对多维数组的下标赋值法采用全下标方式。以三维为例,在全下标方式下,在原有行列下标表示的基础上,再增加页下标,针对每一页下标赋值一个二维数组即可构成一个三维数组。

【例2.34】 创建一个两页的三维数组。

        >> A=[1,2,3;4 5 6;7,8,9]; B=reshape([10:18],3,3).';   %创建两个二维数组
        >> C(:, :,1)=A; C(:, :,2)=B;            %将A、B分别赋给三维数组的页下标1、2

        >> C                                   %显示三维数组C,留意三维数组的表示形式
        C(:, :,1) =
            1    2    3
            4    5    6
            7    8    9
        C(:, :,2) =
            10   11   12
            13   14   15
            16   17   18

2.工具阵函数法

在2.3.3节的表2-8中,曾经给出了常用工具矩阵的生成函数,并且也曾指出,除eye( )函数外,这些函数不但能生成矩阵,而且还能生成多维数组。现举例如下。

【例2.35】 用zeros、ones、rand和randn函数生成多维数组。

        >> zeros(2,3,3)
        ans(:, :,1) =
            0    0    0
            0    0    0
        ans(:, :,2) =
            0    0    0
            0    0    0
        ans(:, :,3) =
            0    0    0
            0    0    0

        >> ones(2,3,2,2)              %生成一个四维数组,留意下面给出的表示形式
        ans(:, :,1,1) =
            1    1    1
            1    1    1
        ans(:, :,2,1) =
            1    1    1
            1    1    1
        ans(:, :,1,2) =
            1    1    1
            1    1    1
        ans(:, :,2,2) =
            1    1    1
            1    1    1

        >> rand(2,3,2)
        ans(:, :,1) =
            0.9501   0.6068   0.8913
            0.2311   0.4860   0.7621
        ans(:, :,2) =
            0.4565   0.8214   0.6154
            0.0185   0.4447   0.7919

        >> randn(2,2,2)
        ans(:, :,1) =
           -0.4326   0.1253
           -1.6656   0.2877
        ans(:, :,2) =
           -1.1465   1.1892
            1.1909   -0.0376

3.拼接和变形函数法

拼接和变形函数及其使用格式在2.3.3节已经给出。并且当时已经提到它们具有构成多维数组的能力,现举例如下。

【例2.36】 用cat和repmat函数创建三维数组。

        >> A1=[1 2 3;9 8 7;4 5 6], A2=A1.'
        A1 =
            1    2    3
            9    8    7
            4    5    6
        A2 =
            1    9    4
            2    8    5
            3    7    6
        >> cat(3, A1, A2)        %数字3表示在页方向上拼接,形成有两页的三维数组,参见2.3.3节
        ans(:, :,1) =
            1    2    3
            9    8    7
            4    5    6
        ans(:, :,2) =
            1    9    4
            2    8    5
            3    7    6
        >> repmat(A1, [1,1,2]) %数字2表示在页方向上放两个矩阵A1,形成共有两页的三维数组
        ans(:, :,1) =
            1    2    3
            9    8    7
            4    5    6
        ans(:, :,2) =
            1    2    3
            9    8    7
            4    5    6

【例2.37】 用reshape函数变形生成三维数组。

        >> A=1:18
        >> reshape(A,3,3,2)   %体会三维数组元素的存放次序
        ans(:, :,1) =
            1    4    7
            2    5    8
            3    6    9
        ans(:, :,2) =
           10   13   16
           11   14   17
           12   15   18

上述函数不仅能生成三维数组,还可生成更多维的数组,限于篇幅不再举例。