/**
* 计算总体标准差
* sqrt(((x1-x)^2 +(x2-x)^2 +......(xn-x)^2)/n ) x为平均数,n为总数
* @param array $array 需要计算的数值数组 如 [1,2,4,10,5,18]
* @param int $scale 保留小数
* @return false|float
*/
public static function getStandardDeviation(array $array, $scale = 2) {
$n = count($array);
$avg = bcdiv(array_sum($array), $n, 5);
$stdev = sqrt(bcdiv(array_sum(array_map(function ($item) use ($avg) {
return pow(bcsub($item, $avg, 5), 2);
}, $array)), $n, 5));
return round($stdev, $scale);
}
网友评论