6数据阵列类型与结构详解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
x2 = -41 -10
-14 -18
说明取出d中第1页由2、3行,1、2列构成的2×2矩阵。
第六章 数据阵列类型与结构
同样在赋值号左边也可以使用冒号,如
d(1,:,2)=1:5 表示用1、2、…、5取代第2页第1行上的5个元素。
第六章 数据阵列类型与结构 2.阵列重新排列 我们还可以在建立多维阵列之后改变其尺寸和维数。其 方法是直接在多维阵列中添加或删除元素有可能改变阵列的 尺寸和维数,也可以利用 reshape 函数,在保持所有元素个数 和内容的前提下,改变其尺寸和维数。例如:
按对二维阵列的操作方式对多维阵列进行处理。例如,设x为
m×n×p维阵列,则y=sin(x)也为m×n×p维阵列,而且其每个 元素分别是 x 中相应元素的正弦值,即 y(i , j , k)=sin(x(i , j ,
k))。
同样,算术、逻辑和关系操作符也可按元素对元素的方式 对多维阵列进行处理,其结果阵列的维数和尺寸与输入相同。
相 应 某 一 点 ( 如 (4 , 3)) 的 红 、 绿 、 蓝 三 色 强 度 分 别 为
RGB(4,3,1),RGB(4,3,2),RGB (4,3,3)。每一点上的颜色可根据三色原理进行计算:
Color=0.30*RGB(:,:,1)+0.59*RGB(:,:,2)+0.11*RGB(:,:,3)
ans = -0.2439 0.7981 + 2.0230i 0.7981 - 2.0230i
2.7431
第六章 数据阵列类型与结构 6.1.6 多维阵列的数据组织 多维阵列可表示两类数据:
● 表示成二维数据的平面或页,这样可将这些页当作矩
阵处理。 ● 表示成多变量或多维数据,例如要表示一个房间中栅
第六章 数据阵列类型与结构
>>C=cat(3,A,B);
>>D=cat(4,A,B); >> size(C)
ans =
2 2 2 >> size(D)
ans =
2 2 1 2 这说明得到的C为2×2×2维,而D为2×2×1×2维。
第六章 数据阵列类型与结构 当某一维的尺寸为 1 时,则称这一维为单点维,比如 D 中 第三维为单点维。
第六章 数据阵列类型与结构 >> whos Name Size Bytes Class A 2×2 32 double array B 2×2 32 double array C 2×2×2 64 double array D 4-D 64 double array E 2×2×4 128 double array ans 1×4 32 double array Grand total is 44 elements using 352 bytes >> size(E) ans = 2 2 4 >> ndims(E) ans = 3
第六章 数据阵列类型与结构 3.利用cat函数建立多维阵列 利用 cat 函数建立多维阵列是方便的,任何两个维数适当
的阵列可按指定维进行连接,从而可以产生更高维阵列。例如
输入 >>A=[2 8; 0 5]; B=[1 8; 2 4]; 当它们沿着第三维以上的维进行连接时,可得到多维阵列, 如输入:
第六章 数据阵列类型与结构
第六章 数据阵列类型与结构
6.1 多维阵列 6.2 结构阵列
6.3 单元阵列
6.4 复杂矩阵结构
6.5 多维阵列、结构阵列和单元阵列函数
习题
第六章 数据阵列类型与结构
6.1 多 维 阵 列
6.1.1 多维阵列 多维阵列是二维矩阵的推广。矩阵有二维:行和列,利用 两个下标可访问矩阵元素,第一个下标表示行号,第二个下标 表示列号。多维阵列应使用三个以上的下标来访问,以三维阵
??? Error using ==> eig Input arguments must be 2-D.
第六章 数据阵列类型与结构 这说明eig函数不能应用于多维阵列。但我们可从多维阵 列中取出一部分,以作为这类函数的输入,只要维数、尺寸 适当,也是完全可以的。例如:
>> eig(A(:,:,3))
第六章 数据阵列类型与结构 6.1.4 多维阵列的使用 许多应用于二维矩阵的概念和技术也可以应用于多维阵
列,主要有
● 下标访问技术。 ● 阵列重新排列。 ● 阵列的序列变换。 为说明这几种技术,先产生一多维随机整数阵列: d=fix(20*randn(10,5,3)); 这一阵列为10×5×3维,而且其元素取值为整数。
>>A(:,:,3,2)=10*eye(3);
>>size(A) ans =
3
3
3
2
这说明得到的矩阵A为3×3×3×2维。
第六章 数据阵列类型与结构 2.利用MATLAB函数产生多维阵列 利用MATLAB的函数(如rand、randn、ones、zeros等)都可 直接产生多维阵列,在函数调用时可指定每一维的尺寸。例如, 为产生100×3×2维的正态分布随机数R,可输入 >>R=randn(100, 3, 2); 为产生各元素相同的多维阵列,可采用ones函数,也可采 用repmat函数,如输入 >>A=5*ones(3, 4, 2); >>B=repmat(5, [3 4 2]); 这两个多维阵列是相同的,即A=B。
2
3 2 9
4
2 0 11
6
13 6 6
8
5 2 6
8
0 6 3
8
5 7 4
可以看出,reshape函数是按列方式操作的。又如对上面产 生d,有下列合法指令:
y1=reshape(d,[6 25])
y2=reshape(d,[5 3 10]) y3=reshape(d,[2 5 3 5])
第六章 数据阵列类型与结构
但如果操作数中有一个为标量,另一个为阵列,则在标量与阵
列的所有元素之间应用指定的操作符。
第六章 数据阵列类型与结构 3.面向矩阵的函数 面向矩阵的函数 ( 如线性代数函数和矩阵函数 ) ,不能应 用于多维阵列,给这些函数提供多维阵列会导致一个错误。 例如: >> A=randn(4,4,5);
eig(A)
第六章 数据阵列类型与结构 1.利用下标建立多维阵列 建立多维阵列可从产生二维矩阵出发,扩展其维数,从 而得到多维阵列。例如,先产生一个矩阵 >>A=[5 7 2; 0 1 2; 3 4 2];
这时A只是一个3×3的矩阵,实际上也可看作是3×3×1
的阵列,因此再输入
第六章 数据阵列类型与结构 >>A(:, :, 2)=[2 7 3; 4 2 8; 2 0 3] A(:,:,1) = 5 0 3 2 4 7 1 4 7 2 2 2 2 3 8
列为例,它有三个下标,第一个表示行号,第二个表示列号,
第三个表示页号。图6.1表示一个4×4×3的多维阵列结构。例 如,访问阵列A的第二页第三行第四列的元素,则可以采用
A(3, 4, 2)。
第六章 数据阵列类型与结构
图6.1 4×4×3的多维阵列结构
第六章 数据阵列类型与结构 6.1.2 建立多维阵列 建立多维阵列与建立矩阵的方法类似。但 MATLAB 还为 建立多维阵列提供了专门的函数。建立多维阵列可采用四种 方法: ● 利用下标建立多维阵列。 ● 利用MATLAB函数产生多维阵列。 ● 利用cat函数建立多维阵列。 ● 用户自己编写M文件产生多维阵列。
第六章 数据阵列类型与结构 1.下标访问技术 访问多维阵列中的元素应采用各维的下标,例如,访问第
2页(3,2)位置上的元素可采用d(3,2,2)。而且在下标中可以
采用向量,表示多个元素,例如,取第3页(2,1)、(2,3)和(2, 4)上的元素时,可输入 d(2, [1 3 4],3) ans= 13 24 17
第六章 数据阵列类型与结构 6.1.5 多维阵列计算 1.面向向量的函数 对这一类函数(如sum,mean等)通常总是在第一个非单点 维上操作,而且大多数函数允许指定操作的维。但是也有例 外,比如cross函数(求两个向量的外积)缺省时在第一个长度
为3的维上进行操作。
第六章 数据阵列类型与结构 2.面向元素的函数 按元素对元素的操作函数,如三角函数、指数函数等,可
格点上的温度或气压,则应用四维阵列表示。
现在考虑 RGB 图像数据,它是一个三维阵列,其组织结 构如图6.2所示。 这样要访问RGB的整个平面时,可输入 red_plane=RGB(:,:,1);
第六章 数据阵列类型与结构 访问三个平面上的一块子区域,可输入 subimage=RGB(15:25,50:85,:);
第六章 数据阵列类型与结构
图6.2 RGB图像数据阵列的组织
第六章 数据阵列类型与结构
6.2 结 构 阵 列
6.2.1 建立结构阵列 建立结构阵列有两种方式: ● 使用赋值语句。
cat函数还可以嵌套调用。例如继续输入:
>>E=cat(3,C,cat(3,[11 12;13 14],[5 6;7 8]));
这时产生的E为2×2×4维。
第六章 数据阵列类型与结构 4.用户自定义M文件产生多维阵列 对于任意指定的多维阵列,用户都可以编写专门的M文件 来产生,这样可避免在设计中过多地在程序中输入数据。 在实际记录每天、每月、每年测量的有关数据时,也可以
编写M文件将它们组合成多维阵列,从而提供给设计者使用。
第六章 数据阵列类型与结构 6.1.3 多维阵列信息 利用MATLAB函数和命令可以获得多维阵列的信息,
ndims函数可获得多维阵列的维数,size函数可得到阵列各维
的尺寸,whos命令可得到阵列的存储和格式。例如,继续上 面产生的阵列,输入:
A(:,:,2) =
2
0
3
这说明我们已经产生了一个3×3×2的多维矩阵A。
第六章 数据阵列类型与结构 如果要扩展维的所有元素均相同,则可用标量来输入。例如:
>>A(:,:,3)=6;
>>A(:,:,3) ans =
6
6 6
6
6 6
6
6 6
第六章 数据阵列类型与结构 进一步扩展维数可得到4维阵列: >>A(:,:,1,2)=eye(3); >>A(:,:,2,2)=5*eye(3);
应注意, prod(size(d))=prod(size(y1))=prod(size(y2))=prod(size(y3)),这 一点也是采用reshape函数的基本要求。
利用squeeze函数可以删除多维阵列中的单点维,例如: >> b=repmat(6,[4 3 1 3]); c=squeeze(b);
size(b)
ans = 4 ans = 4 3 3 但应注意,squeeze对二维阵列(即矩阵)不起作用。 3 1 3
>> size(c)
第六章 数据阵列类型与结构
3.阵列的序列变换 permute函数可改变多维阵列中指定维的次序,例如,对于
前面产生的M阵列,有
>> M1=permute(M,[2 1 3]) M1(:,:,1) = 2 3 2 9 4 2 0 11 6 13 6 6 M1(:,:,2) = 8 5 2 6 8 0 6 3 8 5 7 4
第六章 数据阵列类型与结构 >> M=cat(3,fix(15*rand(3,4)),fix(10*r and(3,4))) M(:,:,1) =
2
3 2
9
4 2
0 13
11 6 6 6
M(:,:,2) = 8 6 6 5
5
2
8
0
3
8
7
4
第六章 数据阵列类型与结构 则输入: >> N=reshape(M,4,6) N=
第六章 数据阵列类型与结构 冒号(:)操作符在向量和矩阵操作中起着重要作用,同样 在多维阵列中,也可以利用冒号来使用多维阵列。例如:
>> x1=d(:,3,2)
x1 = 31 -10 24
31
-41
第六章 数据阵列类型与结构 58 27 21
-15
-5 说明取出d中第2页第3列的所有元素。同样
>> x2=d(2:3,1:2,1)
第六章 数据阵列类型与结构
在命令中,2表示原M阵列的第二维,l、3分别表示M阵列
的第一、三维,这一命令说明将M阵列的第一维与第二维交换, 也就完成了每页上二维阵列的转置,又如: >> A=randn(5, 4, 3, 2); B=permute(A, [2 4 3 1]);
size(B)
ans = 4 2 置的扩展。在序列变换中也可直接确定出元素之间的位 置关系,在上例中A(4,2,1,2)=B(2,2,1,4)。
相关文档
最新文档