10/20/2006

4.2矩陣之統計

對於一個矩陣元素值之統計,前面也有部份討論到,諸如sum、mean、max、min等等,都是就元素值之特性進行操作者。其中有些以向量矩陣為主(包括行向量與列向量),但亦可應用於一般矩陣(例如m x n矩陣),將每行之元素進行處理(例如累加),然後將結果置於一個列矩陣中。這些統計型函數如表4.5所示:

表4.5矩陣簡單之統計指令








指令型式說明
median(A)求陣列A之中間值
cumsum(A)求陣列A之累加值
prod(A)求陣列A之乘積值
cumprod(A)求陣列A之累積值
std(A)求陣列A之標準差




4.2.1 MEDIAN中間函數


求矩陣中之中間值數,其與mean函數不同,後者求其平均值,但應用上大致相同。


>>A=magic(5)
A =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9

>>median(A)
ans =
11 12 13 14 15


此為各行之中間值,若要求各列之中間值則可用median(A,2)



>>median(A,2)
ans =
15
14
13
12
11



4.2.2 CUMSUM累加函數


這是矩陣之累加函數,可以就行向各元素逐一累加。若仍以上式A魔術矩陣為例:


>>cumsum(A)
ans =
17 24 1 8 15
40 29 8 22 31
44 35 21 42 53
54 47 40 63 56
65 65 65 65 65


其所得結果為由上往下累加,若要列向累加,則可以在其後加一個dim=2之參數:



>>cumsum(A, 2)
ans =
17 41 42 50 65
23 28 35 49 65
4 10 23 43 65
10 22 41 62 65
11 29 54 56 65


而魔術方陣其各方向累加起來之值均相同,也可由此得證。利用cumsum函數也可以立即產生一個等差級數之陣列,例如等差值5之陣列如下:



>>M=cumsum(0:5:50)
M =
0 5 15 30 50 75 105 140 180 225 275




4.2.3 PROD乘積函數


prod函數與sum之功能大體相同,只是prod是將各元素沿特定陣列方向相乘,得其乘積為答案。例如:



>>prod(1:5)
ans = 120


將上式之魔術方陣A進行行向運算:



>>prod(A)
ans =
172040 155520 43225 94080 142560


顯然,其各行結果不像加法,會有相同的結果。若要列向相乘,也可以設dim=2:



>>prod(A,2)
ans =
48960
180320
137280
143640
89100



4.2.4 CUMPROD累積函數


累積函數cumprod與累加 cumsum亦屬相同的功能,只是以乘法表示而已。其可能應用的則為等比級數之產生。例如:



>>cumprod(1:2:10)
ans =
1 3 15 105 945



4.2.5 STD標準差


一般標準差之計算有兩種方式,其一為分母除以n-1,即不包括平均值之項目,一為分母除以n,
計算上式標準差之函數型式如下:







s=std(X, flag, dim)


其中dim之定義與前面相同外,flag之旗標為0則採用第一式計算標準差,換言之,其分母為n-1;若旗標為1,即採用第二式計算。一般採用的方式以旗標為0者為多,其效果與不標旗標的情況相同。相關例子如下:設M為隨機函數:



>>M=round(rand(4,5)*100)-50
M =
34 33 -20 -20 -12
-48 0 -31 4 36
18 21 -31 -35 35
-12 -7 18 20 9

>>std(M)
ans =
36.1109 18.5000 23.2522 24.5000 23.0217

>>std(M,1)
ans =
31.2730 16.0215 20.1370 21.2176 19.9374


std(M)與std(M,1)之差異在於前者除以n-1,後者除以n。在項目較少的場合,後者之變異數會較小,在統計學上會有顯著的差異。通常標準差常與平均值相配合,其平均值可以對應求得如下:



>>mean(M)
ans =
-2.0000 11.7500 -16.0000 -7.7500 17.0000


若要求得列向的標準差,則可令第三個參數dim=2,得到的是行向量標準差。



>>std(M,0,2)
ans =
28.0357
32.6833
32.2614
14.5017


若需求得整個矩陣之平均值與標準差,則可改用下面方式計算:



>>[mean(M(:)) std(M(:))]
ans =
0.6000 26.0897


由於M矩陣為隨機函數產生,故其平均值應接近於零。