多维数组
众所周知,矩阵是用的最广的二维数组。但是现实世界上有很多事物是多于二维的。物理学上的波以尔定律,就是以气体压强、气体容积和绝对温度的三维数据来描述的。库存物资的安放位置,是以库房号、货架号、层号和列号的四维数据来定位。人事档案,则是以姓名、个人属性和个人属性值的三维数据来描述。多维数组的一般表达式为A(i,j,k…),式中,A为多维数组名;i,j,k…为一维、二维、三维…下标索引值。通常i称行,j称列,k称页。
多维数组的创建
1.多维数组的创建可以通过直接赋值来取得;
2.通过矩阵函数生成多维函数。
多维数组的运算
多维数组的运算与二维数组的运算基本相同。MATLAB的大多数内装函数支持多维数组,例如sum、mean、size、ones、zeros、eye、rand、randn和prod等。在某些函数不支持多维数组时,可以分别用二维数组经多次运算来代替。
好的,下面都是例子:
实例演练
1.直接赋值创建多维数组
>> 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.通过矩阵函数生成多维函数
>> 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
>> 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
>> 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个滑块游戏