2014-08-28 64 views
0

我在Matlab的載體,看起來像:Matlab的標準偏差 - 把向量作爲概率,不重視

vect = 0 
    100 
    300 
    500 
    700 
    1000 
    500 
    300 
    200 
     0 

當標準化,每個值應指示一定值的概率,和我的價值觀是隻有1比10(即0%機率1,100/sum(vect)機率2等)。

如何計算出數值(尤其是標準偏差)的統計數據?如果我做了mean(vect),我最終得到了360,並且我得到了一個類似的標準偏差值。當然,平均值應該在5左右。我確定根本不需要手動編寫代碼,但是必須有一種方法可以直接在Matlab中進行編碼,所以我想我會問!

回答

2

我不確定matlab是否有內置的函數,但沒有什麼大不了的。兩者都是一個襯墊反正

vect = [0; 100; 300; 500; 700; 1000; 500; 300; 200; 0]; 
prob = vect./sum(vect); 
val = [1:10].'; 
meanVal = sum(prob.*val); 
stDev = sqrt(sum(prob.*val.^2) -sum(prob.*val)^2); 

編輯:

有做這個兩種功能。它們也分別稱爲meanstd。但他們取而代之的是概率分佈對象。

+0

是的 - 這絕對是明確的做法,但似乎很奇怪,沒有更多的直接路線.. – tiswas 2014-08-28 14:35:57

+0

嗯,我會說,一般來說,你不需要更直接的方式來做到這一點。如果你非常想要更直接的方式,你應該寫一個你自己的功能。將它存儲在一個你總是包含在matlab中的路徑中,或者將它放在一個你記得它就像是一個「工具」文件夾左右的地方,並在需要時包含它。但是,看一下'meanVal = sum(prob。* val)'。如果你稱之爲直接路線,它真的可以更多嗎?首先創建概率分佈對象可能會有更多的工作,並且可能有更多的開銷和更長的運行時間。 – patrik 2014-08-28 21:08:17

+0

@tiswas你也知道你可以在matlab中編寫一個啓動函數。在那個中你可以添加一個尚未由matlab完成的啓動例程。例如,您可以在其中設置路徑。因此,如果您有一些您始終想要包含的工具,可以將其添加到啓動功能中。換句話說,如果您認爲matlab未命中一個字符串,您可以花5分鐘時間編寫函數,並將其設置爲啓動函數中添加的路徑。你永遠不需要關心它,你只花了5分鐘的時間。 – patrik 2014-08-28 21:14:00

1

如果調用stem(vect)你會看到一個vect是正態分佈變量的概率密度函數,因此,可以適合一個正態分佈vect而不正常化

x = (1:length(vect))'; 
pdf = fitdist(x, 'normal', 'freq', vect); 

結果的平均值爲5.63889,標準差爲1.66944。