上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
上述函数不仅能生成三维数组,还可生成更多维的数组,限于篇幅不再举例。