|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
+ r! Y- B) w0 K- a( u3 d B
Covariance 翻译为协方差,因此,MATLAB里面的函数cov也就是求协方差了。至于MATLAB语言里面的协方差函数cov的语法是什么样的以及怎么用的,我们稍后再说,这里首先介绍下协方差相关的基础知识点。
9 T+ }# z$ i6 E0 @1 ^
K# H* C1 c$ O0 ]/ L" ] h本文内容参考自MATLAB的帮助手册,有的时候不得不说,数据手册才是最好的教材,不仅对于MATLAB,这里提供的都是原滋原味的官方内容。例如我经常去了解一些MATLAB中的相关函数,命令等,都可以通过MATLAB的数据手册;如果我想了解一些IP核以及与之相关的知识,我可以查看Xilinx的官方数据手册,内容应有尽有,相比而言,如果我去借一些书籍去查看FPGA的IP核,不仅版本陈旧,而已也有可能翻译的有问题,让人一知半解。
; z! E9 Z) T& A, l( i8 S) z
9 y6 {9 ]) O* Y0 L废话就说到这里,下面正式开始介绍。: O6 v' A; L# w4 i
3 ~* Z" H+ X& Y& U( G" M- U目录6 H/ {8 J" X; N) L9 l5 U
5 v, Q! g3 m( [" A! J8 ~: A
基础知识2 b) G9 F {9 J/ o5 [
: B, X U4 p4 N$ H- e/ j. h, X; x# O协方差(Covariance):4 ~- \! D8 X: Z
2 I w$ w1 y- J/ x6 w
协方差矩阵( covariance matrix):
# X4 e! _6 l) f) D5 G. c2 o) ?( r$ I. N4 c4 h$ K
矩阵的协方差:
6 s6 P3 a1 w! ]8 c7 Y; [+ z8 M+ N6 y! C* j
方差:(这是赠送的)5 \2 p" M# ?4 M% x
8 ]6 Z3 {8 D* |9 w& P* K4 | u
MATLAB中的 cov* C$ I7 q) ~3 ~/ W6 V7 B
- }7 ^9 T( u7 c语法格式:3 j( [9 ^4 I" `# _4 \
$ K' B; e$ {- P. M1 s0 v/ U
C = cov(A)
6 `5 k! `$ i( ~2 [+ \5 q: {
2 Q' C+ \- K8 g' M( TC = cov(A,B) # N- y' Y" E, m
: ]* e* T4 {, K: r+ VC = cov(___,w)& |! g: s" J! @$ F3 t, I) i2 L; {
5 l5 d: v1 H4 L
C = cov(___,nanflag)0 \0 n" R5 G% y: W8 p. o
: q7 i8 N: y7 }( X# y示例) h9 L7 f. w9 ^* w
7 f2 F& m' c+ [1 Q6 L2 {C = cov(A) 举例(矩阵的协方差)
; _# P. k' ^4 W2 ?: O8 P* q. m+ ^1 y, b: I, {# {+ g. M& X* [/ G
cov(A,B) 举例之两个向量之间的协方差
2 k+ ?# G# T7 j9 Q0 g1 _% w6 u) o& [, O0 K5 ?
cov(A,B) 举例之两个矩阵之间的协方差
; E3 V1 }, ]* s( f: ~8 Q
1 c* [' F" H7 gSpecify Normalization Weight% T% O3 j6 |/ ?- k/ W
8 {) r$ ~0 @& i _0 V5 u9 U
Covariance Excluding NaN
% z: D: V5 E8 O6 r. ]- a
# T# @: v; O% f, J. A+ j, ]' q* l, W \. G9 B- G
; O, f! r1 R8 k8 h. `基础知识
+ T8 ?) L2 M& p, }协方差(Covariance):* C& K2 c/ O0 q0 v; F2 s7 h
5 `9 k* ?7 i# j( H, o) z! x* ]
对于两个随机变量向量A和B,那二者之间的协方差定义为:7 `5 j" C0 N6 ?- l. I' t
9 m+ Z' @: L Q
* T& r) {; f' r& f2 W) y
* y( f" N2 A' y- t, ?! f其中表示向量A的均值,表示向量B的均值。$ U5 ^6 x P2 M. T
8 y% k: G3 F. S) a7 S8 ~
协方差矩阵( covariance matrix):! e! Y6 K) m) D* Q. S* d
$ o- [2 ~) E/ c" ^6 ~
两个随机变量的协方差矩阵是每个变量之间成对协方差计算的矩阵,
: y: f; |! p* g9 {7 m0 _. g9 [2 |
, C0 y$ `4 N, Q
2 L! e Q9 e* f3 c
- l; Z8 g6 f3 M! \* h6 `
矩阵的协方差:
. W) p# y+ e& Q4 l5 J" g
6 j" A6 B( m0 P* V3 {对于矩阵A,其列各自是由观察组成的随机变量,协方差矩阵是每个列组合之间的成对协方差计算。 换一种说法
7 r, m: y6 a* g8 N9 K( v0 B0 @! @
- u6 s8 y% _3 Z7 O0 z
% b% C" \& |+ S2 p+ ]
, E( ?8 M9 D0 w5 K9 `/ E k
方差:(这是赠送的); R- v2 m( u! \/ `3 K
. P. D4 o( c+ Y/ t
对于由N个标量观测组成的随机变量向量A,方差定义为
1 b" }; h) i3 U6 ^7 d, [
& L1 ?7 \; o$ y$ s5 L1 N1 j
$ T4 k2 z2 ?+ t! J8 R2 \
7 v$ h+ z! m% s, K( f
其中u是A的均值:
" O$ C z$ C# t+ Z/ ?1 v& T- s- @; U# r* _9 @/ C9 b
4 T' t( a0 z! W# B+ j
+ R* F1 _1 p# {一些方差定义使用归一化因子N而不是N-1,可以通过将w设置为1来指定。在任何一种情况下,假设均值具有通常的归一化因子N.
+ I( J1 J1 D) ^) i
; J K* m$ a% d9 a(注意:w是后面要说的MATLAB里面的协方差函数的一个参数而已,在具体的MATLAB函数里面可以通过设置w来指定归一化因子!)
9 b) Z8 {2 S+ L7 i
+ T& T6 S7 `& i0 Q6 P+ f8 }1 P9 j8 }, ]9 G
MATLAB中的 cov W( L2 m) ]/ x2 ?% n3 E1 `
: u8 @+ q3 }, W: Y/ U! _$ [. B. q* [语法格式:
& }1 p- P, s* A* J. Y( t
. }$ I! `7 E+ }" J! X
5 N/ ~6 H$ m4 J* r
9 h/ a3 I, U' E+ U( T( O& L3 g下面逐个讲解:
8 w7 z; {1 z( B2 T* {( {' J
9 c {. S3 ^" `C = cov(A)) u& Q" {. y* N! v* L0 y
5 O0 L) g+ }$ J h! X& i' E8 p
C = cov(A) returns the covariance.2 ~+ O' y7 ]. D. Y' ^- U0 @/ Q
4 ^7 Y8 t) E7 l) t2 h
C = cov(A)返回协方差。
/ b% _4 m+ s' b" q1 u& u1 a
0 b* ]' Y- u# h. i9 f0 z# ~- If A is a vector of observations, C is the scalar-valued variance.
4 ]( u/ l7 ]& e
( k1 y1 w# A5 {+ p6 x1 \8 D, e5 Y- 如果A是一个观测向量,那么C是一个标量值的方差。9 n0 z7 b! V" E1 O
8 I- D9 x# f5 Q e- K- If A is a matrix whose columns represent random variables and whose rows represent observations, C is the covariance matrix with the corresponding column variances along the diagonal., `) Y* m6 |" d9 h
) B* C! a8 g) M3 N& u- C4 A
- 如果A是矩阵,其列表示随机变量,其行表示观测值,则C是协方差矩阵,沿对角线具有相应的列方差。(协方差矩阵的协方差是列的协方差值)
( H- v1 t/ G8 O8 C ?. l , B, ]- S4 d( l3 h1 i4 Q( O
- C is normalized by the number of observations-1. If there is only one observation, it is normalized by 1.
; m5 q; R0 N' n$ x / r3 J0 p6 `1 s
- C由观察数-1归一化。 如果只有一个观察值,则将其标准化为1。
4 D1 Y! V( t/ c. p& I9 g
+ b0 ?7 j+ u1 |- If A is a scalar, cov(A) returns 0. If A is an empty array, cov(A)returns NaN. J" D' ]6 j0 f( f; j1 j! Q
3 J5 u# y; ?9 u. d5 B9 g
- 如果A是标量,则cov(A)返回0.如果A是空数组,则cov(A)返回NaN。 d& ?( u; n, f& a; F, I2 i
( N* ]9 ^/ }4 ^' \) w
(你看看人家考虑的多周全!). D( ?' J0 w* W9 P
) ~. b9 [' f2 |' y, \: M7 r$ U4 {( {, T2 r' z+ l- g1 ]* z
C = cov(A,B)
1 O" @" w1 v0 t4 C0 e9 t8 e8 }
4 h! K6 P9 o! mC = cov(A,B) returns the covariance between two random variables A and B.
4 C7 B8 y2 S+ M; Y8 p. ^
7 |+ K# f2 F; `& P2 A+ DC = cov(A,B) 返回两个随机变量A和B之间协方差。2 Q+ W! J1 ]% H1 C2 I
. ?7 a* G! c* N* \: D! c
- If A and B are vectors of observations with equal length, cov(A,B) is the 2-by-2 covariance matrix.
& F8 G5 t. V( y/ Y6 D
/ [/ N+ V1 Z7 Q! C* Q- 如果A和B是同等长度的观测向量,那么C是一个2*2的协方差矩阵。+ V7 |, e% I. G* G; ~4 w" R
! i% ]( \: K% U) C" w
- If A and B are matrices of observations, cov(A,B) treats A and B as vectors and is equivalent to cov(A(
,B( ). A and B must have equal size.
- {, `8 A5 l5 d0 r% x: i- _ 3 c) T* E/ k2 t) K# ^ o. U K
- 如果A和B是观察矩阵,则cov(A,B)将A和B视为向量,并且等同于cov(A(
,B(:))。 A和B必须具有相同的大小。
" F/ E$ W, }" ~! s % z) d" t- p; V% a. u$ ^+ V: b k
- If A and B are scalars, cov(A,B) returns a 2-by-2 block of zeros. If A and B are empty arrays, cov(A,B) returns a 2-by-2 block of NaN.
9 D Q# V/ ~' Y3 k - ^: _- f$ y$ p& F7 E, T
- 如果A和B是标量,则cov(A,B)返回2乘2的零块。 如果A和B是空数组,则cov(A,B)返回2乘2的NaN块。2 g3 g, G: [- u% |8 }
& h: Y/ H2 V% a l; e/ e4 ^
8 B& B1 D# i# p; p& V
- r3 P0 G, L% ^6 U0 ?% KC = cov(___,w)
0 z2 l0 c7 H9 O6 }$ J9 O; H9 t2 v
C = cov(___,w) specifies the normalization weight for any of the previous syntaxes. When w = 0 (default), C is normalized by the number of observations-1. When w = 1, it is normalized by the number of observations.4 L! z( X( B/ o7 M
?, p( J/ _$ \& N( _, e( ~% HC = cov(___,w)指定任何先前语法的归一化权重。 当w = 0(默认值)时,C由观测数-1归一化。 当w = 1时,它通过观察次数归一化。
- e; A, `: L/ d. S, @
* `6 B2 D/ ], u, \- D4 X" H, T/ b: T, n9 M7 K% R4 h3 G- i7 }
C = cov(___,nanflag)! V( \1 z% g7 v# L" w1 E3 J
" H, `! e0 `: M# \, L' a. GC = cov(___,nanflag) specifies a condition for omitting NaN values from the calculation for any of the previous syntaxes. For example, cov(A,'omitrows') will omit any rows of A with one or more NaN elements.5 s/ ?7 C* s1 a( o: a& `- \
* f7 J. ]/ i! \1 O& L/ j( W' f4 iC = cov(___,nanflag)指定从任何先前语法的计算中省略NaN值的条件。 例如,cov(A,'omitrows')将省略具有一个或多个NaN元素的A的任何行。
. k* ^1 Q, q) G
( ^6 n, i8 u8 T$ s% p8 x% K, T- x, H9 U9 J& _1 z
示例
' o2 \9 |3 [5 p$ t" K' f
: F! T: @( {) n! A1 F5 h' N下面举例说明重要的语法格式:
' z; V4 x/ ?7 w/ b& C f# l
4 P) }9 @$ o" o& |0 |# }1 HC = cov(A) 举例(矩阵的协方差): P3 B4 y" k$ w2 k5 z: {
1 V* G2 d g( }0 _5 W, z
Create a 3-by-4 matrix and compute its covariance
: v2 O1 i$ @" [+ ^/ r! v
+ W0 ~' m7 O) n8 h, D% T- A = [5 0 3 7; 1 -5 7 3; 4 9 8 10];
- C = cov(A)
+ F# a# Z9 X8 I * D8 u. N- E8 M7 Q9 d' G' W
% V3 W" S) v" `; z7 }2 ], [
" v1 V7 Y* j/ ?/ J. X6 I, Z
% A @8 Y. q0 T& { {+ C0 U- C = 4×4
/ b1 b# P; Q" h; i" @- 4.3333 8.8333 -3.0000 5.6667
- 8.8333 50.3333 6.5000 24.1667
- -3.0000 6.5000 7.0000 1.0000
- 5.6667 24.1667 1.0000 12.3333
- / _3 f1 Z3 W- Z/ j1 F
4 D2 g* ]4 c' S
2 |. [* U& a' B+ @ T
, E' P& `- d- D; B
$ \) i7 X: G3 q; W- w% TSince the number of columns of A is 4, the result is a 4-by-4 matrix.5 w) I o4 x- r
. f& Y: r+ q5 y' f由于矩阵A有4列,表示有4个随机变量,那么协方差矩阵是4*4的。" U- h9 e2 [ Q7 w
; N5 t, \% h/ B& p
- u; j) R7 ]; w0 T
cov(A,B) 举例之两个向量之间的协方差* T" I2 U" i6 f2 q7 v: |
! l1 @; @: `" k& u# ?; `, k+ }1. Create two vectors and compute their 2-by-2 covariance matrix.- |& V( s+ g+ ^% T6 h
5 q0 Q; a$ l# a1 { h7 L+ e# R- A = [3 6 4];
- B = [7 12 -9];
- cov(A,B)
, n$ t# N( O8 F; o0 z
* o- W0 T1 {. m: n" D; Z
V" s, s" F. w. q+ \: E
. J; I% o) s1 h% L4 G
3 @ b; N) T" |- E- {" k- ans = 2×2
. z8 F* |0 ^" O8 s0 U* T9 x/ m Z9 z- 2.3333 6.8333
- 6.8333 120.3333
4 V# b, Z- s2 z, l
q( S. G) n2 } \+ u2 Q; v, Z* F- F; f& j7 g% o0 t Q" _
6 c: ~. S( H! H6 a9 y& E
4 x' m. ?$ n) A) ~2 vcov(A,B) 举例之两个矩阵之间的协方差+ m& ]. R q! K
( k, o1 u( `0 F: V% h7 u! y: ~
2. Create two matrices of the same size and compute their 2-by-2 covariance.
, ~8 S( s7 g2 i6 U& t ?. l' L
/ z" U& i G" j* X- _7 A/ P, V! n- A = [2 0 -9; 3 4 1];
- B = [5 2 6; -4 4 9];
- cov(A,B)
. M; a, e% S) S5 M
& u6 N7 e( F- T+ a% U7 Z3 M% }+ {/ e3 s8 F+ ?, C% ~
/ q& g$ v; B5 R4 `1 a, m0 a0 E6 a3 ]" B/ W
- ans = 2×2
: R1 P7 f% V0 `5 Z4 O: |2 W- 22.1667 -6.9333
- -6.9333 19.4667( S) E( l% F7 m' c
4 K, s4 i/ w& k0 H
4 }% t D$ @( w3 f1 d( k; \" ^, o
9 Z5 i2 P' U5 R ? S* g/ _
2 x+ V* ^- ?6 m这相当于求A(:)和B(:)的协方差,如下验证下:$ k, Z- T! w* F: L! F" |
6 H( a6 P% P: r I" |
6 K: R" S+ j' t' w- k! H* A* K% O2 U+ R0 _" |$ G
/ B% J! \' s1 m7 X1 j0 t2 {0 q" m& r0 x+ I h0 a( M ?, A) j
5 k' g4 |' j' g' H( b2 k) F
2 e5 _* g/ X: X$ s/ Q8 T1 |& A8 P
对比下cov(A,B)发现是一致的:+ b: k7 s4 W0 Q5 ^9 C% Q
9 v5 l" P2 p' u8 V# `
1 u% E2 @7 Z8 u; i/ \# j( J
* X0 F5 M5 c z* Q P, }' y8 j* m# J: `$ ]
Specify Normalization Weight
1 y* O+ ~ m6 L# L. X
6 e# Z2 C0 }3 A4 G/ v5 U( O创建一个矩阵并计算由行数归一化的协方差。0 W; R8 f) o( Z- W, E$ A
) V! B2 ]+ ?# x5 \% L- A = [1 3 -7; 3 9 2; -5 4 6];
- C = cov(A,1)/ P; L# D: B& ^
" ?5 E- j( V# e' k3 N
: P2 r: h/ B/ C2 }) V3 D9 X' Y' B; x; p- C = 3×3
- 6 x+ F' ]% s# M: Y% g
- 11.5556 5.1111 -10.2222
- 5.1111 6.8889 5.2222
- -10.2222 5.2222 29.5556* b+ r% @$ h" r5 I# y* q; l
1 f5 k" X0 E' T
1 I1 p% |( T/ n2 s
$ W8 r8 a) j h4 y a+ S
+ I0 c" b! t% Q* f9 ?7 D; b
我觉得还是有必要比较下不归一化的情况:
" H6 i- N& C/ p% y/ G$ L! ?( G& K3 a) |
>> A = [1 3 -7; 3 9 2; -5 4 6]3 L/ S5 p( v0 H: Z) l% Z/ O/ M
* Y! P$ X3 f# C5 l7 |; r
A =
0 ?* t0 A0 g9 m
7 r* u2 d& W6 C5 a 1 3 -7: x6 `% q& P# t, g3 o, R4 M
3 9 2/ r2 b6 A$ O! F7 i% ]5 a+ n4 @
-5 4 6
1 ~! g; Z3 v3 |. ]& V4 W @5 s4 `! {
>> C = cov(A,1)" ?" P: m% A( x/ A1 Y
, W8 S) Z# r% r, }C =
& ]. v/ ~9 `7 r2 U! A! w
9 U, C7 U1 E. j- C) t! o# E 11.5556 5.1111 -10.2222. I. C7 C5 v% w. ^* `6 q3 w
5.1111 6.8889 5.2222
$ C7 @5 ]* I) O9 x -10.2222 5.2222 29.5556, e! D: v9 Q2 ^% L& ?
. I( w/ u, I7 \9 f1 z2 h2 `" X
>> C = cov(A)1 a$ z1 C6 {( P$ Y% B
# H% }, L$ O& ]- I
C =
, W3 X, N; D$ t+ k e7 g
, ]( Y: O8 t- j" o6 P0 N% Z 17.3333 7.6667 -15.3333
" ]& j5 d$ J5 H3 N1 @ 7.6667 10.3333 7.83332 b* U+ V0 B0 r: \5 } F2 h: M
-15.3333 7.8333 44.3333' {4 c6 e2 |/ u8 Y
5 |1 s" x# L( F" ?1 \
8 v/ r+ ^6 E7 rCovariance Excluding NaN
8 c% O; i# p5 l" o5 E8 o; L% U6 @% P" V4 N! v
创建矩阵并计算其协方差,排除包含NaN值的任何行。
- Y$ k+ A# h2 }3 a s6 h( q
/ J. G0 j+ W' x# I; O( Y" ^A = [1.77 -0.005 3.98; NaN -2.95 NaN; 2.54 0.19 1.01]
2 z( y$ ]3 k4 E! B/ L: _5 M5 ^1 P; M
- A = 3×3
3 O( f: O/ e8 P7 q- 1.7700 -0.0050 3.9800
- NaN -2.9500 NaN
- 2.5400 0.1900 1.0100
& I' p5 q% D6 a& W6 o1 w U
5 R3 @0 u( B1 H& L0 m7 e
% C+ D% F$ K d
$ o9 H6 X4 v8 M& A! {C = cov(A,'omitrows')+ ^ y; v( B. e; b1 z! B8 e
+ V% v9 G! g$ V- C = 3×3
- p# U4 ?+ R3 h( O. y; l
- 0.2964 0.0751 -1.1435
- 0.0751 0.0190 -0.2896
- -1.1435 -0.2896 4.4104
- * _ B# p5 ^$ X5 d9 f* _
. A! j% ? r, l7 M" a, a
: X" g2 T2 [, D
& t# I# `; l$ |! T0 X
' _& D1 G! d8 H8 _" Y1 H* @! X& H( w* \
. F; F! r/ g4 p% S4 a( D- _8 @! g
# o/ y& Q. T2 N% M C: C# W
7 w2 w. ? _3 O5 q {+ ?1 W# F5 ~( Y( Y' c/ J
3 v2 V' ?9 |: c. E. g+ P: u
3 L5 [1 o4 Y( R' A
0 q$ }+ z/ w/ [* r% E7 U
' i/ L1 f* V, W- N7 c, _% C0 K& S
|
|