|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
S" P$ n( a# J- I2 h+ _
Covariance 翻译为协方差,因此,MATLAB里面的函数cov也就是求协方差了。至于MATLAB语言里面的协方差函数cov的语法是什么样的以及怎么用的,我们稍后再说,这里首先介绍下协方差相关的基础知识点。
9 B( v, `, L& b- R8 e- H; ^) j
本文内容参考自MATLAB的帮助手册,有的时候不得不说,数据手册才是最好的教材,不仅对于MATLAB,这里提供的都是原滋原味的官方内容。例如我经常去了解一些MATLAB中的相关函数,命令等,都可以通过MATLAB的数据手册;如果我想了解一些IP核以及与之相关的知识,我可以查看Xilinx的官方数据手册,内容应有尽有,相比而言,如果我去借一些书籍去查看FPGA的IP核,不仅版本陈旧,而已也有可能翻译的有问题,让人一知半解。' v+ T. \6 p) W! u% U3 C5 w
7 S* ~& ?6 ?! N0 f6 B6 v" ^废话就说到这里,下面正式开始介绍。
% e2 ~8 ?$ D% A, |& l% m/ ]9 l4 |. e4 y; l1 n% ?% o6 D/ l
目录' v5 a# n# M( e# U& V
/ m7 o1 W$ V8 h1 H基础知识
5 N, T9 m: i3 {4 W8 {0 n6 v8 s* Q9 u3 P" I% b% y1 N5 e5 I( [
协方差(Covariance):
$ C6 m+ }/ f7 E# n% N5 W: Y+ D) {' W7 {
协方差矩阵( covariance matrix):
3 H6 G+ Y T$ x2 w7 Z; ~) |- e+ `: c- b% e, ~# A3 {
矩阵的协方差:
* ^. K. R0 \, x1 G* k. H" J1 U5 c V- _8 }0 L
方差:(这是赠送的)
) k2 J" ]. T$ \1 V) d/ s3 Z& c1 a3 B* G& f
MATLAB中的 cov3 R( L" H( n& ~9 {$ p$ o2 b- t
: @ E0 l) {: E) E( `
语法格式:
8 m" D6 O7 j5 a4 u
7 W, s q4 q+ J! G* w \C = cov(A)
8 `& H8 |" H! t, Y1 n# i2 o" T% X4 y6 g( N, B7 |$ o; Q
C = cov(A,B)
; N% a4 ?! p. [4 y( V; E$ g3 u6 m
C = cov(___,w)
8 D% s3 T5 y# E) Q
- I, @) i, ?) F- Z8 JC = cov(___,nanflag): u t$ F0 ^! r4 d" y' c
0 r6 I; A$ {% l; u# ?9 G! n
示例
1 O% L3 d- s( G; z0 t; F! N) P
8 w% p$ J# x* ZC = cov(A) 举例(矩阵的协方差)' X$ b' D5 R( Y2 Y. A$ ^" {* p
+ g" g$ @8 I" d7 mcov(A,B) 举例之两个向量之间的协方差
( m( ~& D( m, u. D/ A) p" p. j
cov(A,B) 举例之两个矩阵之间的协方差1 |5 I9 f/ T; X' i
3 @3 L; E' X4 ^Specify Normalization Weight
7 x1 u' f3 ~! Q2 Q
0 `. a$ q5 b6 V* m& f2 G1 x: jCovariance Excluding NaN* K" q* C) @; Y( @
4 d" d5 h' n/ N; H# A
% G5 {3 v! [. x' }+ I1 x% z' Q9 D. B, G- @; H' W4 V( q
基础知识7 h; \7 |: r8 S) R, G
协方差(Covariance):. J0 {0 E9 b. x
! p6 a& D* u* e1 m
对于两个随机变量向量A和B,那二者之间的协方差定义为:
7 j/ ]5 D L$ [/ A% L/ l7 O4 ]+ |% r7 u+ V
5 k3 |+ ?5 X0 T) o) A4 R( s' a# E8 s" p {! `; o$ u7 R
其中表示向量A的均值,表示向量B的均值。* D( Z% d/ Z( q+ a' v( e
0 q3 O- s2 \0 X, T( j协方差矩阵( covariance matrix):7 [6 w- \+ X" D$ l* P& D, ?5 B
5 i9 h8 w" y& C$ Z4 ?9 ]两个随机变量的协方差矩阵是每个变量之间成对协方差计算的矩阵,* [( m3 X2 B; o6 g
5 S6 s7 ^( g8 b6 e# G: j
& Y8 ^9 r$ z( S9 f. z
5 ~& y5 F* I! K
矩阵的协方差:
6 n+ i3 B b, F8 T# L* g4 F( d; a) h
对于矩阵A,其列各自是由观察组成的随机变量,协方差矩阵是每个列组合之间的成对协方差计算。 换一种说法 J+ I" I' J8 R+ J2 ^/ d' B
# A2 L# ~2 \' y* c
9 W* h! h% [& V0 X3 C* G
" n3 J$ m$ k9 K. c8 v" q9 Q
方差:(这是赠送的)
+ V, v4 t/ Z) Z( l; Z) _; w$ C, R. m5 g6 S% ^- D( Q8 L6 X
对于由N个标量观测组成的随机变量向量A,方差定义为) V7 _1 \! i* W. Y' f+ X0 Y7 {
0 u4 E$ g3 {# w% d3 K
6 J# ] [# M+ |; L
6 w8 a+ G( y; l
其中u是A的均值:7 B. c8 k9 i" ?: U7 r5 D% ?1 w
! c' k; t, w! d
+ D/ `6 D \6 s% j2 K( ?
4 y s7 x+ r3 \) V4 Z一些方差定义使用归一化因子N而不是N-1,可以通过将w设置为1来指定。在任何一种情况下,假设均值具有通常的归一化因子N.
5 u- e! O4 {2 U3 u( S0 W6 Q
" G% z, \8 B' z5 _* R1 y1 w3 b(注意:w是后面要说的MATLAB里面的协方差函数的一个参数而已,在具体的MATLAB函数里面可以通过设置w来指定归一化因子!)* y! T: p: N/ R0 e3 F
: R. ?: t' L, ]" s4 [ l
7 ~" H9 F" ]# v2 P
MATLAB中的 cov
$ p+ a3 k- w, V# k( n
' F5 K7 n" k' z: R. |语法格式:
( {9 a. y+ q* h R9 q1 s
* f; M( x; w+ M4 m- @, m9 s0 b
# T/ K& S) W0 g% e! l9 H' R& x/ C; o
下面逐个讲解:4 y' E; `3 k, s7 ]" c. h
- x3 E/ D1 F, vC = cov(A)
! U& E; Y7 s! o3 G* E1 n M+ Y5 x( Y* n
C = cov(A) returns the covariance.
" E' b" o4 f# n" u+ ~
% C* P1 Y$ g" l, W: D0 m Z* LC = cov(A)返回协方差。: z: `( q- l G; p) |8 I
7 V5 s% L8 i M( r$ G7 h$ }- If A is a vector of observations, C is the scalar-valued variance.
. `- `- e3 ~% M8 o4 R 2 \8 s+ D. M2 b, t; w/ }1 M/ J
- 如果A是一个观测向量,那么C是一个标量值的方差。" C: y9 C/ g, D' P* Y! n& @
+ Y# g% U" u) A* N$ |/ m0 g
- 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.
) I6 q o8 H1 Y& V% @% O4 h7 ]# m
5 ?7 }( p9 Z8 v- 如果A是矩阵,其列表示随机变量,其行表示观测值,则C是协方差矩阵,沿对角线具有相应的列方差。(协方差矩阵的协方差是列的协方差值)
) d; h! Z4 m9 y 2 i" A3 K, J% h0 a# m3 F I3 @
- C is normalized by the number of observations-1. If there is only one observation, it is normalized by 1.* v" ~& _8 I8 T' |3 U9 N
2 }; C& \' f0 ~% G0 M1 u2 |- C由观察数-1归一化。 如果只有一个观察值,则将其标准化为1。$ ^ a9 b9 x# l! v/ Y! N
$ k1 r' V: @. l5 b6 L
- If A is a scalar, cov(A) returns 0. If A is an empty array, cov(A)returns NaN.6 m1 O0 T7 L R# k3 @1 ?6 `
% x) X1 Q8 u2 Z7 V. }* L7 Z; D: p2 j- 如果A是标量,则cov(A)返回0.如果A是空数组,则cov(A)返回NaN。7 b- G) T1 G; R8 D% e# s, l0 p
' R! X" v! ^( Y
(你看看人家考虑的多周全!)+ e. T* U7 m, q' T# y8 X% y% I
% E! x( n( G1 ?. [1 `4 h+ `$ h
1 {( B- R! @1 }3 a' K8 N% dC = cov(A,B)
- Q d% Q0 F! w2 a5 L4 W' C; f2 h5 {8 M8 {
C = cov(A,B) returns the covariance between two random variables A and B.- Q% k5 f9 x& w3 |4 h
5 j# G2 \/ E" O. i' E8 eC = cov(A,B) 返回两个随机变量A和B之间协方差。
3 F' U. N/ v. W/ `( z! J6 n0 w8 ?( G9 t1 r5 ^1 j3 o
- If A and B are vectors of observations with equal length, cov(A,B) is the 2-by-2 covariance matrix.
4 p2 ]- B# P. g* Y
$ a5 N! [( p ], X4 b- 如果A和B是同等长度的观测向量,那么C是一个2*2的协方差矩阵。
- o* v. |6 A& ~7 g9 D+ Z/ A0 I. d
. s, @) _4 w/ w2 Q' O- 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., b2 F G4 {$ @, v5 B& F$ \6 P
" k. G9 x7 \( |
- 如果A和B是观察矩阵,则cov(A,B)将A和B视为向量,并且等同于cov(A(
,B(:))。 A和B必须具有相同的大小。/ W& i( I) q. M* k
0 m' I: u2 N, l/ {" \4 K* x
- 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., q+ h/ `1 [9 o$ W/ ?/ t
* ~8 M8 [4 O9 x4 t7 }/ \8 U
- 如果A和B是标量,则cov(A,B)返回2乘2的零块。 如果A和B是空数组,则cov(A,B)返回2乘2的NaN块。
9 i+ d( L0 ~: P- Q 4 J# p: @) g, b% W
. ~& g8 V! W! J }. L( _3 r1 l: v
/ S1 J- j5 ^4 b# \6 p% o
C = cov(___,w)
3 D7 A4 I& k# H4 Z
& [# E% R$ g( ?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.
# I+ P; o9 r. N+ k; n6 A1 M) u u" K3 j' c
C = cov(___,w)指定任何先前语法的归一化权重。 当w = 0(默认值)时,C由观测数-1归一化。 当w = 1时,它通过观察次数归一化。
( R, }! T7 k; R- z2 u
- G" _# R' m/ |
! i) Q; G; b3 S! v4 @; N# X! {C = cov(___,nanflag)* A3 `, u& | Z' C. H
0 V. i" R; ?$ d+ g7 o9 B, o! @! Z
C = 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.
6 d) j( `$ V( m1 l* ?( |7 k1 A1 j, s4 H
C = cov(___,nanflag)指定从任何先前语法的计算中省略NaN值的条件。 例如,cov(A,'omitrows')将省略具有一个或多个NaN元素的A的任何行。
" K$ I% ?* K( e9 q# z9 y
& a2 m( ]' Y7 W: E* |
5 B6 y6 Z3 U3 ~ x, O4 s, s示例9 ]6 J7 Z: a! z3 s" s
7 g: T# A7 s( d4 [# h+ n
下面举例说明重要的语法格式:5 m+ H" ]6 i# `# J: z' D: F
# m% h2 a$ [( O# W! T, v3 k
C = cov(A) 举例(矩阵的协方差)
5 V7 n5 l: U( ~# h* w6 u5 U: T$ e( X! {7 P4 G, L' V! Q, J
Create a 3-by-4 matrix and compute its covariance, |5 k' n9 \. u& y" I
" h9 _ l5 p1 t, L: ?' w- A = [5 0 3 7; 1 -5 7 3; 4 9 8 10];
- C = cov(A)3 r6 h0 Y" I4 I/ }# Q6 o: h4 |
3 Z# X3 f1 R- F. K
7 d; ]0 ^ p( F2 S$ M! ~. X& y8 t/ X& f
5 B, ?: H& b! R' T: c1 a' O
- C = 4×4
% n8 Q0 G! t! @$ _9 H- 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
- + `8 |3 _8 `& m8 t) N, w( x
; G* x: B a( |0 t5 Q. v
2 G7 w R- `5 m' r% o; X! ], i6 ?& r) q6 d, Y) z/ Q. }0 s
0 L: H3 T' r* u+ i0 F
Since the number of columns of A is 4, the result is a 4-by-4 matrix.6 M# ?! N7 j+ P" v2 G* E: p
# H, ~2 D7 g; [由于矩阵A有4列,表示有4个随机变量,那么协方差矩阵是4*4的。4 N9 ~/ q" H7 m* `6 i
1 }! ?- D: y e" j) n" h) I* O/ f( R$ I) @$ f& O) n
cov(A,B) 举例之两个向量之间的协方差6 J. e' u7 U! L) q, u
" P7 R0 K7 C1 z7 ]2 C9 |
1. Create two vectors and compute their 2-by-2 covariance matrix.
9 p' N5 z! Z( q2 T2 e
0 h/ @4 g5 k2 ]/ S Y- A = [3 6 4];
- B = [7 12 -9];
- cov(A,B), }( ~1 V1 T- f3 t; k! C5 v) l
% X) R, b/ _* l! `: \
# ?0 k2 Z, i6 c. @+ I# @+ I: h) o. h9 L
3 x2 A2 f2 c0 c( E
- ans = 2×2
3 E& X! c2 G- z: ~, n- 2.3333 6.8333
- 6.8333 120.33337 \6 R" J' _& U7 C, K
w4 O" j. J: L
3 Y0 v2 k6 N+ i% J' Q
( J2 z# q5 ]* y" k1 P @: E* J
/ [1 Y9 p* d Q' z+ B) Ocov(A,B) 举例之两个矩阵之间的协方差
% [5 b; R" f4 t5 A6 V e
! s0 z' o3 f3 j' _0 J: F# S# S- I2. Create two matrices of the same size and compute their 2-by-2 covariance.! g# a2 ?9 F6 p
3 O& M; e1 Q6 r1 e2 Q9 }
- A = [2 0 -9; 3 4 1];
- B = [5 2 6; -4 4 9];
- cov(A,B)# k4 `4 O9 q! Q$ l4 K% R% {
" h/ m" p2 b7 I4 v% p
& f4 N/ ~- r5 x& J2 a; U3 J2 q1 w9 C7 V& |" _) J: A
* P7 _; l2 _6 z+ m" ^5 [$ v: y4 o0 l- ans = 2×2
( U6 i& y7 p9 j+ h2 L3 q- 22.1667 -6.9333
- -6.9333 19.4667
4 [2 G: V. ]& G) t3 C% p " E, \) ?2 y3 W1 q
3 v) ~' j( T* N8 Y! o0 r. p1 k6 c2 O1 l2 V4 i& c p/ U$ c X# W
7 x2 O o. `3 ^8 J+ k
这相当于求A(:)和B(:)的协方差,如下验证下:& Z; }. @/ z) H: z
4 R, I: H4 U A+ v/ |, b
: }* e H$ Y7 m5 e" y& h# R$ b' N( S! @ ]( P
# s3 A, L( L h" s0 Z- I% |# w4 w. b! [% O: X6 q$ X
" k/ b+ u6 y" r6 W( u1 S( B9 v4 L; ?5 u$ m% V5 r
对比下cov(A,B)发现是一致的: I) ?# e8 Z6 G- D$ k3 Q
3 S7 u2 s. {+ x9 y6 n3 U
- c" x( A+ w2 Y* C1 n" `7 [
- f! l; E; y9 a& F* B! \
) B1 y/ ]2 L3 ?* E
Specify Normalization Weight, t! E7 {/ F+ U# y3 g
% i* E% D; `& f" ]+ W' @创建一个矩阵并计算由行数归一化的协方差。7 m. n- Q d" C0 H# E# f0 `) v. F
! s7 _/ k" L4 V3 x; b7 i6 N% H
- A = [1 3 -7; 3 9 2; -5 4 6];
- C = cov(A,1)/ y+ s9 `/ _/ B' h) K
+ k' {4 ?2 O; ` N2 l
% }# w0 b+ A( @- C = 3×3
1 ?1 r* a8 q& v+ c. p3 }- 11.5556 5.1111 -10.2222
- 5.1111 6.8889 5.2222
- -10.2222 5.2222 29.5556
8 W& |' p' }: Z/ E. R/ n2 O8 S5 N
' |2 j1 v- d0 [8 a& c
, B' e* d/ Y/ |0 A6 D4 E1 X- G& Y6 G+ a0 O+ m2 K( L
. B: D: Y- w D! r7 e# ~- E* X2 W我觉得还是有必要比较下不归一化的情况:
* \9 ?) |4 J2 [6 W) X
( _7 B4 J+ Q' f T9 ]% _) T) i>> A = [1 3 -7; 3 9 2; -5 4 6]7 T; Y1 X. t! ?" n% ~4 U
" A+ v, `* Y6 K5 GA =- Y4 Y& z3 ^2 z8 `7 Q9 p
% u5 \' i& S9 ~' b1 g- n; t 1 3 -7+ D+ s3 B. Y7 Y: x7 y
3 9 2
3 j5 l/ i$ z( B/ E x -5 4 6
$ Q8 ~+ B$ O J' f4 e
3 @3 x* W) {: ?7 G3 d# W. J>> C = cov(A,1)
4 E; i# J! F7 G: S0 i; `. I
' {% \# R8 D0 T: k- b) c: J2 vC =( i3 y/ Q$ Z" i, R' u* e" m
# M t* N2 \% Y! K) j* C 11.5556 5.1111 -10.22221 ], `3 l( G+ e& w4 l5 F; b
5.1111 6.8889 5.2222. b `3 j( N) U7 @3 `7 H
-10.2222 5.2222 29.5556, A# W [& G! b# |+ {" ~" e
% i" M4 E3 p& S>> C = cov(A)/ c. F+ v6 E; w1 g9 u. H
. n; n9 c4 Q( l6 ?- a
C =5 r+ d9 b4 D; V3 m4 N: S8 z
~* \" N; N( H0 Z. F, ~9 z 17.3333 7.6667 -15.3333! j) F) B6 t4 @& O' {& u
7.6667 10.3333 7.8333
4 M* _' \ c8 L0 ?! U; j4 F -15.3333 7.8333 44.3333
$ D# L- n' M( e. w9 r
1 B3 h2 q6 |" n+ H9 q Y* u
3 m, {5 k9 b- e7 g6 ]. L9 [Covariance Excluding NaN
0 S! I9 O" i, p$ x/ j$ u6 Q+ G; J3 M& Q& ~: e3 o3 y! r# D) G/ y
创建矩阵并计算其协方差,排除包含NaN值的任何行。1 Y6 x, j- a1 a" p$ A( v
+ j: G5 T6 q- K1 AA = [1.77 -0.005 3.98; NaN -2.95 NaN; 2.54 0.19 1.01]& w/ l5 w2 s+ r, S1 e- n a1 U' x$ ~8 R
5 Q+ |* q, e6 R) [- A = 3×3
- 9 K r. Q4 R1 s' _$ F
- 1.7700 -0.0050 3.9800
- NaN -2.9500 NaN
- 2.5400 0.1900 1.0100
- / Z: v7 [( Q H& K3 v
, y6 a" L3 l# G
R7 N8 Y& z/ M- u
0 X! G/ ^ D! b' kC = cov(A,'omitrows')/ i+ J& H$ K) K2 ^: Y" Z/ Q
% n5 m. ^5 w7 F1 z$ F- C = 3×3
/ y: _( `, i9 I: o# y9 O0 v- 0.2964 0.0751 -1.1435
- 0.0751 0.0190 -0.2896
- -1.1435 -0.2896 4.4104
$ K2 d6 l! ~# g! E( P3 B
+ Q8 ^1 s+ i: ? ~: k' |6 w; E# D; N0 U
6 ?) ]+ j1 J$ _, \
0 H7 w& u# j; L" @) C2 e' ~: ^9 F! }" S2 W/ d- z& d& G$ _* y% W0 f
1 l' O( Y( I3 [, t6 b: i; B5 _7 P \
7 A! R0 ?, ?1 A
4 U8 Z$ {' j; x7 r. a8 z' U9 W) n% S, ^
$ [9 ?# Z; W) q3 r! l/ G) ^
/ h4 @* w- Q# `2 ^: {4 c9 [: P# [
4 S; Q t) P7 ` |
|