我有一个矢量 a
a = [86 100 41 93 75 61 76 92 88 97]
Run Code Online (Sandbox Code Playgroud)
我要计算std并mean通过自己:
>> mean(a)
ans =
80.9000
>> std(a)^2
ans =
335.2111
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,我得到错误的方差:
>> avg = mean(a)
avg =
80.9000
>> var = sum(a.^2)/length(a) - avg^2
var =
301.6900
Run Code Online (Sandbox Code Playgroud)
我在这里想念什么?
为什么sum(a.^2)/length(a) - avg^2 != std(a)^2?
试试这个:
var = sum(a.^2)/(length(a)-1) - (length(a))*mean(a)^2/(length(a)-1)
var =
335.2111
Run Code Online (Sandbox Code Playgroud)
var 计算为(无偏)样本,而不是人口方差.
有关完整说明,请参阅此处.
从matlab文档中,
VAR将Y归一化为N-1,其中N是样本大小.只要X由独立的,相同分布的样本组成,这就是绘制X的总体方差的无偏估计.
但
Y = VAR(X,1)归一化N并产生样本的第二个矩与其平均值.VAR(X,0)与VAR(X)相同.
以便
>> var(a,1)
ans =
301.6900
Run Code Online (Sandbox Code Playgroud)