1. 程式人生 > >計算一組離散資料的標準偏差和中位數。函式的構建

計算一組離散資料的標準偏差和中位數。函式的構建

% 計算一組離散資料的標準偏差和中位數。
% 我們假設資料是以頻數或資料點數量給出。作為例子,我們再次以辦公室僱員為例
% 子,我們取得每個年齡的僱員數量。假設他們是:
% 2 個僱員的年齡是 17
% 1 個僱員的年齡是 18
% 3 個僱員的年齡是 21
% 1 個僱員的年齡是 24
% 1 個僱員的年齡是 26
% 4 個僱員的年齡是 28
% 2 個僱員的年齡是 31
% 1 個僱員的年齡是 33
% 2 個僱員的年齡是 34
% 3 個僱員的年齡是 37
% 1 個僱員的年齡是 39
% 2 個僱員的年齡是 40
% 3 個僱員的年齡是 43
% 我們要做的第一件事是建立一個絕對頻數資料陣列,這就是我們在前一節中使用的陣列
% N(j)。這一次我們會有每個年齡的入口,所以我們把所給年齡沒有僱員的地方設為 0。我們
% 把絕對頻數稱為 f_abs:
f_abs = [2, 1, 0, 0, 3, 0, 0, 1, 0, 1, 0, 4, 0, 0, 2, 0, 1, 2, 0, 0, 3, 0, 1, 2, 0, 0, 3];
% 我們把資料“裝”在一起,所以我們定義一個 bin width(We are “binning” the data, so let’s
% define a bin width)。由於我們是以一歲一歲度量的,我們把 bin width 設為 1:
binwidth = 1;
% 我們建立一個數組表示 17 到 43 之間的年齡,binwidth 是 1。
bins = [17:binwidth:43]; %bins=[17,43];
% 現在我們收集未加工的資料,使用 for 迴圈遍歷所有資料,重新構建陣列

如下:
raw = [];
for i = 1:length(f_abs)
if f_abs(i) > 0
new = bins(i)*ones(1,f_abs(i)); %ones(a,b)建立一行兩列單位向量
else
new = [];
end
raw =[raw,new]; %陣列的建立/拼接
end
% 這個迴圈所做的就是建立一個數組,按頻率重複每個元素。執行得:

raw =
Columns 1 through 21
17 17 18 21 21 21 24 26 28 28 28 28 31 31 33 34 34 37 37 37 39
Columns 22 through 26
40 40 43 43 43

ave = mean(raw) %平均數
ave =
30.7308

md = median(raw) %中位數
82
md =
31

sigma = std(raw) %標準偏差
sigma =
8.3836

注:標準差也被稱為標準偏差,標準差(Standard Deviation)描述各資料偏離平均數的距離(離均差)的平均數,它是離差平方和平均後的方根,用σ表示。標準差是方差的算術平方根。這裡寫圖片描述
陣列對應位置的重構,這個基礎問題我好久都不知道如何下手 今天終於看到了,感謝這本教材,真的特別特別好。