我想计算perl中每行数字的方差。我写这个子程序:如何计算perl中的方差?
################################################################
# variance
#
#
# A subroutine to compute the variance of an array
# division by n-1 i s used
#
sub var{
my ($data) = @_;
if (@$data ==1) {
return 0;
}
my $mean = mean ($data);
my $sqtotal = 0;
foreach (@$data) {
$sqtotal += ($_ - $mean) ** 2
}
my $var = $sqtotal/(scalar @$data - 1);
return $var;
}
如果我有相同数量的
[0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98的58元给了这阵, 0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98, 0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98,0.98]
计算给了我1.25421964097639e-30。
我也尝试使用Statistics :: Descriptive模块(http://metacpan.org/pod/Statistics::Descriptive),它给了我2.11916254524942e-15。
而且我也试过这个网站(http://www.alcula.com/calculators/statistics/variance/),其结果是2.2438191655582E-15。
为什么结果是不一样的......我可以只使用了模块,但它是非常内存密集型不知何故我的文件,该文件主要包括万线58号
。我不确定它为什么耗尽这么多的记忆。
有人能告诉我为什么我的计算给出了与模块不同的数字,以及如何使模块以更少的内存工作?内存密集的东西只是该模块的固有缺陷。几个帖子似乎表明这一点。
谢谢!
所有这些数字本质上都是零模浮点算术。而你自己的尝试似乎是最精确的。它也看起来会做正确的计算,如果它使用较少的内存,我建议你可以使用你自己的子。编辑:哦,对不起,我刚刚意识到我的派对有多晚。 ^^ – DeVadder