- 在线时间
- 2759 小时
- 最后登录
- 2017-9-15
- 注册时间
- 2011-4-3
- 听众数
- 538
- 收听数
- 4
- 能力
- 80 分
- 体力
- 1764 点
- 威望
- 27 点
- 阅读权限
- 150
- 积分
- 5990
- 相册
- 0
- 日志
- 0
- 记录
- 5
- 帖子
- 6675
- 主题
- 3503
- 精华
- 3
- 分享
- 6
- 好友
- 1721
TA的每日心情 | 开心 2017-2-7 15:12 |
|---|
签到天数: 691 天 [LV.9]以坛为家II
 群组: 2013年国赛赛前培训 群组: 2014年地区赛数学建模 群组: 数学中国第二期SAS培训 群组: 物联网工程师考试 群组: 2013年美赛优秀论文解 |
19、多维数组基础,关于二维数组的补充
& ~/ t9 H5 s3 |9 T多维数组即含有多个页的数组;
% K' l, R/ M' k3 x2 u* u多维数组的处理就是在原有的函数基础上增加一个参数: 7 q2 U* Q( h7 i$ G% y
例: ; p" A8 L0 s1 M
zeros(m,n,w)%创建一个m行n列w页的0矩阵
0 f. I t) c1 I2 R2 q/ Nones(m,n,w) & J% m1 i1 B5 H3 \5 }
eye(m,n,w) ; E8 r; Q$ g$ Y0 d0 s1 M5 ~, {
rand(m,n,w) 5 P+ U+ R* }: i* C. E
randn(m,n,w) + q: E- T! n& m- e/ _7 ~- d
randperm没有多页的形式,它只能生成一个由1:n构成的随机排列的一维数组
" D% F1 _0 E0 O相关函数: 5 e7 y- c$ o0 \: v- J
reshape(A,m,n,w)将矩阵A变化为一个具有m行n列w页的矩阵
; [& x4 q( b$ \: r* }6 Orepmat(A,[m n w])将矩阵A作为一个单位,复制到一个具有m行n列w页的矩阵中去
0 o& |7 x# ^! s1 r/ h8 N注意:当要复制到的矩阵为二维时,完全可以用这种形式:repmat(A,m,n)
# Y, O( X, D, ^$ s8 }3 aCat(3,A,B,C)将矩阵A、B、C连接成为一个3页的矩阵
2 O. I, v# g$ {0 J( g. Z若矩阵A为n维矩阵,则size(A)将返回一个含n个元素的一维数组3 s" U4 Y* x8 P( ]; V: v. K
4 K! B+ u3 k$ O20、多维数组的翻转 . F( Y C" N& R- z" n
flipdim(A,1)将A的每个维中的矩阵进行上下翻转;相当于对A的每个维使用flipud # [5 S T6 s9 a' V; F
flipdim(A,2)将A的每个维中的矩阵进行左右翻转;相当于对A的每个维使用fliplr 4 ?6 f. b7 g B6 v! J
flipdim(A,3)A的每个维中的矩阵不做变化,将A的每个维视为单位进行上下翻转;
5 W' ^3 E/ ]& J( ?: J$ \1 Gflipdim(A,4)不做任何改变; 4 c7 L$ i z* i$ c
; |: x. n3 d, D6 U5 i: kshiftdim(A,n)将A的维数进行轮换,分为轮换次数为正和轮换次数为负两种情况 - R1 X6 J* V* L
例如: ) G, R. \6 v2 Y1 w
m行n列w页经过1次维数的轮换就变为n列w行m页 . j" V9 e. ?' V8 I* l. M& ]! W) V1 G5 }
m行n列w页经过-1次维数的轮换就变为1行m列n页w更高的维(轮换次数为负会增加维数) , v f$ x# _' t4 J/ E1 U+ p" u
\- x8 v2 q! o1 u! S a% {# H
例:>> size(A)%A的维数为2行3列3页 $ w. D. J) Q4 ]+ H
: M K0 {+ ?' W" i+ b8 xans = 4 t& @2 T0 t5 k6 `- \: h! q- U) X; h' c
9 N* M j( }# k( y. j$ ?
2 3 3
$ c n! k/ T4 c; b2 j>> B=shiftdim(A,1)%使用shiftdim对维数翻转1次
! Z- a" f2 m% \+ r$ _' t0 ]6 A8 _' C& X1 ?- W3 q
B(:,:,1) =
. n5 y4 E$ i( S3 `! y3 t- v e4 G- I! y
7 16 10
! R$ n# ^. X% M T4 b+ b7 I3 9 13 6 G( ?2 d. O' p# ]# C
8 2 1 & I( [ p n4 S
( h4 @4 ?: M5 P+ ^& L
6 P2 g5 f; Z7 P R- o5 lB(:,:,2) = j+ j4 @% w' D
$ f- V" v4 i; z9 E; I$ Y9 e* F! @
15 17 12 ; j, i! q: J$ `( a" s
14 18 4 + W0 b( [* L- u" C. _- a4 F* C$ j
11 6 5 * j' Y1 u' G! z* m# v* I
/ I# g; I5 V+ C4 ~: ?% C& J. e6 [>> size(B)%得到的新矩阵B的维数为3行3列2页
# I% J" ?+ q+ l6 I2 c' w* R9 _& V6 T4 d: C
ans = * U# b. M# J! Z4 q
* a1 _0 I8 s0 h. V" W8 i7 |
3 3 2
2 g( z. G2 ?, ?: x* I>> B=shiftdim(A,-1);%对矩阵A进行-1次的轮换
/ B, v0 G( F( F>> size(B)%得到的新矩阵B的维数为1*2*3*3 ; O8 A1 v7 b+ t* M
! j% C: N r% d8 i! A
ans =
1 {" l! F* u- X, m& ~; F: r) z
3 p, d4 g3 K* f5 X! R1 2 3 3 # Q& A+ F9 O+ V' o6 l
6 x: k8 o' v: Q
shiftdim维数轮换à联想记忆:shift+dim转换+维数
' ?9 S+ ~+ W4 ]$ @& ]' Kshiftdim的缺点:只能将各个维数轮换,不能对调,因此便有了permute函数对其进行补充
, F0 v" Z/ P1 i) {1 |7 g: }5 |! i: R2 G5 u1 z4 i
permute(A,order)将矩阵A的维数按照自己喜欢的方式进行轮换或对调,括号中的order表示A的维数的任意排列,例如A是四维矩阵,那么order就必须是1234这四个数的一个任一排列 : c2 J5 |, Q0 F( \0 a6 P2 W" F
例:
5 P5 A; Q6 E+ d- R7 t>> A=rand(2,2,3,3);%创建一个2-2-3-3的四维矩阵
" b) g; r3 x% V9 w X( l' G>> B=permute(A,[3 1 2 4])%将A的第一维变为第二维,第二维变为第三维,第三维变为第一维
2 X+ r2 N0 R0 e当我们用permute对一个三维数组进行四维的置换时,第四维数组一定是单一维(这也是shiftdim(A,-1)增加的维数都是单一维的原因),这是因为,任何一个数组都具有大于其本身尺寸的更高维数,并且这些维数均为单位维数。例如,一个二维数组是具有页这一维的,并且仅有一页。总之,任何超过数组本身大小的维数都是单一维。对于上述代码而言,由于M是一个三维数组,其第四维必为单一维,因此,将M第四维与第一维进行转置,第一维就变成了单一维。
, S) ~" O: H% J由上面这段话,我们也容易知道:假设矩阵A的维数是二维的,当我们输入[r,c,p]=size(A)时,一定有p=1
% B( y. s" Y' ^- p& _0 A9 \$ E. f' Y3 a! c) F) @- n0 |
Ipermute是用于取消维数转置的函数
& G+ O8 J+ C/ O! }例:A为四维矩阵
' A8 F- ]8 ?( n0 \+ rB=permute(A,[4 3 2 1])%对矩阵A的维数进行转换
$ L1 Z6 L, o, z+ h3 V' UC=ipermute(B,[4 3 2 1])%对矩阵B的维数进行逆转换,最终重新得到矩阵A
5 a2 P9 R3 m+ q7 l% k ]
) Z( f3 j1 g- ^: v( Q2 V. ] n2 x0 X, L) H0 D. x7 l
|
zan
|