3.11 高维数组
3.11.1 高维数组的创建
【 * 例 3.11.1 -1 】“全下标”元素赋值方式创建高维数组演示。
A(2,2,2)=1 % 单元素赋值创建
数组
A(:,:,1) =
0 0
0 0
A(:,:,2) =
0 0
1
B(2,5,:)=1:3 % 子数组赋值创建
数组
B(:,:,1) =
0 0 0 0 0
0 0 0 0 1
B(:,:,2) =
0 0 0 0 0
0 0 0 0 2
B(:,:,3) =
0 0 0 0 0
0 0 0 0 3
【 * 例 3.11.1 -2 】低维数组合成高维数组。
clear,A=ones(2,3);A(:,:,2)=ones(2,3)*2;A(:,:,3)=ones(2,3)*3
A(:,:,1) =
1 1 1
1 1 1
A(:,:,2) =
2 2 2
2 2 2
A(:,:,3) =
3 3 3
3 3 3
【 * 例 3.11.1 -3 】由函数 ones, zeros, rand, randn 直接创建标准高维数组的示例。
rand('state',1111),rand(2,4,3)
ans(:,:,1) =
0.6278 0.9748 0.2585 0.6949
0.2544 0.2305 0.0313 0.1223
ans(:,:,2) =
0.4889 0.3898 0.8489 0.0587
0.9138 0.3071 0.4260 0.6331
ans(:,:,3) =
0.2802 0.2073 0.7438 0.2714
0.4051 0.2033 0.4566 0.2421
【 * 例 3.11.1 -4 】借助 cat, repmat, reshape 等函数构作高维数组。
(1) cat 构作高维数组示例
cat(3,ones(2,3),ones(2,3)*2,ones(2,3)*3)
ans(:,:,1) =
1 1 1
1 1 1
ans(:,:,2) =
2 2 2
2 2 2
ans(:,:,3) =
3 3 3
3 3 3
(2) repmat 构作高维数组示例
repmat(ones(2,3),[1,1,3])
ans(:,:,1) =
1 1 1
1 1 1
ans(:,:,2) =
1 1 1
1 1 1
ans(:,:,3) =
1 1 1
1 1 1
(3) reshape 构作高维数组示例
reshape(1:12,2,2,3)
ans(:,:,1) =
1 3
2 4
ans(:,:,2) =
5 7
6 8
ans(:,:,3) =
9 11
10 12
3.11.2 高维数组的标识
【 * 例 3.11.2 -1 】维数、大小和
度
clear;A=reshape(1:24,2,3,4);
dim_A=ndims(A) % 测量 A 的维数
size_A=size(A) % 测量 A 的大小
L_A=length(A) % 求 A 的长度
dim_A =
3
size_A =
2 3 4
L_A =
4
3.11.3 高维数组构作和操作函数汇总
【 * 例 3.11.3 -1 】数组元素对称交换指令 flipdim 的使用示例。
A=reshape(1:18,2,3,3) % 创建 3 维数组
A(:,:,1) =
1 3 5
2 4 6
A(:,:,2) =
7 9 11
8 10 12
A(:,:,3) =
13 15 17
14 16 18
flipdim(A,1) % 关于“行平分面”交换对称位置上的元素
ans(:,:,1) =
2 4 6
1 3 5
ans(:,:,2) =
8 10 12
7 9 11
ans(:,:,3) =
14 16 18
13 15 17
flipdim(A,3) % 关于“页平分面”交换对称位置上的元素
ans(:,:,1) =
13 15 17
14 16 18
ans(:,:,2) =
7 9 11
8 10 12
ans(:,:,3) =
1 3 5
2 4 6
【 * 例 3.11.3 -2 】数组的“维序号左移”重组。
shiftdim(A,1) % “维号左移 1 位”重组,使
数组变成
数组
ans(:,:,1) =
1 7 13
3 9 15
5 11 17
ans(:,:,2) =
2 8 14
4 10 16
6 12 18
shiftdim(A,2) % “维号左移 2 位”重组,使
数组变成
数组
ans(:,:,1) =
1 2
7 8
13 14
ans(:,:,2) =
3 4
9 10
15 16
ans(:,:,3) =
5 6
11 12
18
【 * 例 3.11.3 -3 】广义非共轭转置。
permute(A,[2,3,1]) % 相当于 shiftdim(A,1)
ans(:,:,1) =
1 7 13
3 9 15
5 11 17
ans(:,:,2) =
2 8 14
4 10 16
6 12 18
permute(A,[1,3,2])
ans(:,:,1) =
1 7 13
2 8 14
ans(:,:,2) =
3 9 15
4 10 16
ans(:,:,3) =
5 11 17
6 12 18
【 * 例 3.11.3 -4 】“孤维”的撤消和降维。
B=cat(4,A(:,:,1),A(:,:,2),A(:,:,3)) % 串接为 4 维数组
B(:,:,1,1) =
1 3 5
2 4 6
B(:,:,1,2) =
7 9 11
8 10 12
B(:,:,1,3) =
13 15 17
14 16 18
size(B) % 测量数组 B 的大小
ans =
2 3 1 3
C=squeeze(B) % 撤消长度为 1 的“孤维” , 使原 4 维数组减为 3 维数组。
C(:,:,1) =
1 3 5
2 4 6
C(:,:,2) =
7 9 11
8 10 12
C(:,:,3) =
13 15 17
14 16 18
size(C)
ans =
2 3 3
【 * 例 3.11.3 -5 】赋“空阵”值操作。
A=reshape(1:18,2,3,3) % 创建 3 维数组
A(:,:,1) =
1 3 5
2 4 6
A(:,:,2) =
7 9 11
8 10 12
A(:,:,3) =
13 15 17
14 16 18
A(:,2:3,:)=[] % 赋“空”,使原 A 数组的第二、三列消失。
B=A;
A(:,:,1) =
1
2
A(:,:,2) =
7
8
A(:,:,3) =
13
14
size(A)
ans =
2 1 3
A_1=squeeze(A) % 撤消“孤维”,数组由 3 维降为 2 维。
A_1 =
1 7 13
2 8 14
size(B) %B 数组与 A 同样存在“孤维”
ans =
2 1 3
B(:,1,:)=[] % 对“孤维”赋“空”,不能降维!
B =
Empty array: 2-by-0-by-3

激光扫描服务技术具有很高的经济意...

(资料图片)“中国载人航天飞行任务试验用车”、“航天员凯旋礼宾车”、“神舟七号飞...

针对级进模排样的特点以及人工智能技术在工程领域应用的研究,提出了适用于级进模排样...

目前,北京现代汽车有限公司发动机厂拥有两个工厂,分别于2004年和2007年投产,年生产...

9月8日,石家庄兆通金刚石工贸有限公司销售经理王金龙先生在向笔者介绍金刚石制品行业...