多维数组

众所周知,矩阵是用的最广的二维数组。但是现实世界上有很多事物是多于二维的。物理学上的波以尔定律,就是以气体压强、气体容积和绝对温度的三维数据来描述的。库存物资的安放位置,是以库房号、货架号、层号和列号的四维数据来定位。人事档案,则是以姓名、个人属性和个人属性值的三维数据来描述。多维数组的一般表达式为A(i,j,k…),式中,A为多维数组名;i,j,k…为一维、二维、三维…下标索引值。通常i称行,j称列,k称页。

多维数组的创建

1.多维数组的创建可以通过直接赋值来取得;

2.通过矩阵函数生成多维函数。

多维数组的运算

多维数组的运算与二维数组的运算基本相同。MATLAB的大多数内装函数支持多维数组,例如sum、mean、size、ones、zeros、eye、rand、randn和prod等。在某些函数不支持多维数组时,可以分别用二维数组经多次运算来代替。

好的,下面都是例子:

实例演练

1.直接赋值创建多维数组

multiprocessing Array 多维数组 多维数组怎么表示_多维数组

>> A(:,:,1)=magic(3)      %第1页,设为magic(3)

A =

     8     1     6
     3     5     7
     4     9     2

>> A(:,:,2)=vander([1,2,3])  %第2页,设为范德蒙矩阵

A(:,:,1) =

     8     1     6
     3     5     7
     4     9     2


A(:,:,2) =

     1     1     1
     4     2     1
     9     3     1

>> A(:,:,3)=pascal(3)      %第3页,设为Pascal矩阵

A(:,:,1) =

     8     1     6
     3     5     7
     4     9     2


A(:,:,2) =

     1     1     1
     4     2     1
     9     3     1


A(:,:,3) =

     1     1     1
     1     2     3
     1     3     6

2.通过矩阵函数生成多维函数

multiprocessing Array 多维数组 多维数组怎么表示_多维数组_02

>> B=rand(4,4,3)

B(:,:,1) =                        %随机矩阵第1页

    0.3517    0.9172    0.3804    0.5308
    0.8308    0.2858    0.5678    0.7792
    0.5853    0.7572    0.0759    0.9340
    0.5497    0.7537    0.0540    0.1299


B(:,:,2) =                        %随机矩阵第2页

    0.5688    0.1622    0.1656    0.6892
    0.4694    0.7943    0.6020    0.7482
    0.0119    0.3112    0.2630    0.4505
    0.3371    0.5285    0.6541    0.0838


B(:,:,3) =                        %随机矩阵第3页

    0.2290    0.5383    0.1067    0.8173
    0.9133    0.9961    0.9619    0.8687
    0.1524    0.0782    0.0046    0.0844
    0.8258    0.4427    0.7749    0.3998

multiprocessing Array 多维数组 多维数组怎么表示_数据_03

>> A=[1 2;3 4]             %样板矩阵

A =

     1     2
     3     4

>> C=repmat(A,[3,4,3])     %将矩阵A复制成3*4,复制后再复制3页

C(:,:,1) =

     1     2     1     2     1     2     1     2
     3     4     3     4     3     4     3     4
     1     2     1     2     1     2     1     2
     3     4     3     4     3     4     3     4
     1     2     1     2     1     2     1     2
     3     4     3     4     3     4     3     4


C(:,:,2) =

     1     2     1     2     1     2     1     2
     3     4     3     4     3     4     3     4
     1     2     1     2     1     2     1     2
     3     4     3     4     3     4     3     4
     1     2     1     2     1     2     1     2
     3     4     3     4     3     4     3     4


C(:,:,3) =

     1     2     1     2     1     2     1     2
     3     4     3     4     3     4     3     4
     1     2     1     2     1     2     1     2
     3     4     3     4     3     4     3     4
     1     2     1     2     1     2     1     2
     3     4     3     4     3     4     3     4

multiprocessing Array 多维数组 多维数组怎么表示_数据_04

>> A=magic(3)             %输入矩阵A

A =

     8     1     6
     3     5     7
     4     9     2

>> B=ones(3)              %输入矩阵B


B =

     1     1     1
     1     1     1
     1     1     1

>> C=eye(3)               %输入矩阵C


C =

     1     0     0
     0     1     0
     0     0     1

>> D=cat(3,A,B,C)         %沿第3维连接矩阵A、B、C,即成三维数组D

D(:,:,1) =

     8     1     6
     3     5     7
     4     9     2


D(:,:,2) =

     1     1     1
     1     1     1
     1     1     1


D(:,:,3) =

     1     0     0
     0     1     0
     0     0     1

3.关于多维数组的运算

>> B(:,:,1)=magic(3);       %第1页为3阶魔方矩阵
>> B(:,:,2)=ones(3);        %第2页为3阶全1矩阵
>> B(:,:,3)=eye(3);         %第3页为3阶么矩阵(单位矩阵)
>> size(B)                  %B矩阵的大小,为3行、3列、3页

ans =

     3     3     3
 
>> sum(B)                   %数组求和

ans(:,:,1) =

    15    15    15


ans(:,:,2) =

     3     3     3


ans(:,:,3) =

     1     1     1

>> prod(B)                  %数组求乘积

ans(:,:,1) =

    96    45    84


ans(:,:,2) =

     1     1     1


ans(:,:,3) =

     0     0     0

4.猜数游戏
作为多维数组的一个例子,今举一个猜数游戏。游戏一开始,提出7张数据表。请你查看,你心中默想的数字在哪几张表中有你默想的数字(默想的数字限制在1~127,如果想扩大猜数的范围,需增加表数)。随后依程序提示,输入向量。若某个表中有默想数字,则输入向量中的相应元素置1,否则置0。

i1=1:2:127;               %a:c:b表示[a,a+c,...a+n*c],其中n=fix((b-a)/c),fix为取整函数
A(:,:,1)=reshape(i1,8,8); %第一个表,为1:127内的奇数,表示数字转化为二进制数的个位均为1,reshape为矩阵重新排列函数
i2=1:2:63;                
A2=[2*i2;2*i2+1];
A(:,:,2)=reshape(A2,8,8); %第二个表,二进制的数的第2位均为1
i4=1:2:31;
A3=[4*i4;4*i4+1;4*i4+2;4*i4+3]; 
A(:,:,3)=reshape(A3,8,8); %第三个表,二进制的数的第3位均为1
i8=1:2:15;
A(:,:,4)=[8*i8;8*i8+1;8*i8+2;8*i8+3;8*i8+4;8*i8+5;8*i8+6;8*i8+7]; %第四个表,二进制的数的第4位均为1
A5=[16:31,48:63,80:95,112:127]';
A(:,:,5)=reshape(A5,8,8); %第五个表,二进制的数的第5位均为1
A6=[32:63,96:127]';
A(:,:,6)=reshape(A6,8,8); %第六个表,二进制的数的第6位均为1
A7=[64:127]';
A(:,:,7)=reshape(A7,8,8); %第七个表,二进制的数的第7位均为1
A
V=input('please input a vector as [0,0,1,0,1,1,0],which matrix has your number set 1 else set 0\n');
S=sum(V(1)+2*V(2)+4*V(3)+8*V(4)+16*V(5)+32*V(6)+64*V(7));  %若向量中某一元素为1,说明猜想数转换为二进制数的相应位数为1,再由此式转化为十进制数。
fprintf('your number is %d\n',S) %输入向量

>> guessnum

A(:,:,1) =

     1    17    33    49    65    81    97   113
     3    19    35    51    67    83    99   115
     5    21    37    53    69    85   101   117
     7    23    39    55    71    87   103   119
     9    25    41    57    73    89   105   121
    11    27    43    59    75    91   107   123
    13    29    45    61    77    93   109   125
    15    31    47    63    79    95   111   127


A(:,:,2) =

     2    18    34    50    66    82    98   114
     3    19    35    51    67    83    99   115
     6    22    38    54    70    86   102   118
     7    23    39    55    71    87   103   119
    10    26    42    58    74    90   106   122
    11    27    43    59    75    91   107   123
    14    30    46    62    78    94   110   126
    15    31    47    63    79    95   111   127


A(:,:,3) =

     4    20    36    52    68    84   100   116
     5    21    37    53    69    85   101   117
     6    22    38    54    70    86   102   118
     7    23    39    55    71    87   103   119
    12    28    44    60    76    92   108   124
    13    29    45    61    77    93   109   125
    14    30    46    62    78    94   110   126
    15    31    47    63    79    95   111   127


A(:,:,4) =

     8    24    40    56    72    88   104   120
     9    25    41    57    73    89   105   121
    10    26    42    58    74    90   106   122
    11    27    43    59    75    91   107   123
    12    28    44    60    76    92   108   124
    13    29    45    61    77    93   109   125
    14    30    46    62    78    94   110   126
    15    31    47    63    79    95   111   127


A(:,:,5) =

    16    24    48    56    80    88   112   120
    17    25    49    57    81    89   113   121
    18    26    50    58    82    90   114   122
    19    27    51    59    83    91   115   123
    20    28    52    60    84    92   116   124
    21    29    53    61    85    93   117   125
    22    30    54    62    86    94   118   126
    23    31    55    63    87    95   119   127


A(:,:,6) =

    32    40    48    56    96   104   112   120
    33    41    49    57    97   105   113   121
    34    42    50    58    98   106   114   122
    35    43    51    59    99   107   115   123
    36    44    52    60   100   108   116   124
    37    45    53    61   101   109   117   125
    38    46    54    62   102   110   118   126
    39    47    55    63   103   111   119   127


A(:,:,7) =

    64    72    80    88    96   104   112   120
    65    73    81    89    97   105   113   121
    66    74    82    90    98   106   114   122
    67    75    83    91    99   107   115   123
    68    76    84    92   100   108   116   124
    69    77    85    93   101   109   117   125
    70    78    86    94   102   110   118   126
    71    79    87    95   103   111   119   127

please input a vector as [0,0,1,0,1,1,0],which matrix has your number set 1 else set 0
[1 1 0 0 0 1 1]
your number is 99

嗯…我觉得这个题需要解释一下,写在注释了。

15个滑块游戏

multiprocessing Array 多维数组 多维数组怎么表示_多维数组_05