stats_standard_deviation

(PECL stats >= 1.0.0)

stats_standard_deviation返回标准差

描述

stats_standard_deviation(array $a, bool $sample = false): float

返回 a 中值的标准差。

参数

a

要查找标准差的数据数组。请注意,数组的所有值都将被强制转换为 float

sample

指示 a 是否代表总体样本;默认值为 false

返回值

成功时返回标准差;失败时返回 false

错误/异常

a 中的值少于 2 个时,会引发 E_WARNING

添加笔记

用户贡献笔记 5 个笔记

levim at php dot net
10 年前
以下是一个严格遵循 PECL 源代码的实现。对于想要使用它但没有扩展的用户以及想要了解发生情况的用户来说,这很有用。

<?php

if (!function_exists('stats_standard_deviation')) {
/**
* 此用户级实现严格遵循实现;
* 它不会尝试以任何方式改进代码或算法。如果您在数组中少于 2 个值,它会引发警告,就像
* 扩展一样(尽管是作为 E_USER_WARNING 而不是 E_WARNING)。
*
* @param array $a
* @param bool $sample [可选] 默认值为 false
* @return float|bool 标准差或错误时的 false。
*/
function stats_standard_deviation(array $a, $sample = false) {
$n = count($a);
if (
$n === 0) {
trigger_error("数组具有零个元素", E_USER_WARNING);
return
false;
}
if (
$sample && $n === 1) {
trigger_error("数组仅具有 1 个元素", E_USER_WARNING);
return
false;
}
$mean = array_sum($a) / $n;
$carry = 0.0;
foreach (
$a as $val) {
$d = ((double) $val) - $mean;
$carry += $d * $d;
};
if (
$sample) {
--
$n;
}
return
sqrt($carry / $n);
}
}

?>
Pascal Woerde
13 年前
如果您想要一个用于总体和样本的函数,可以使用此函数

<?php

function standard_deviation($aValues, $bSample = false)
{
$fMean = array_sum($aValues) / count($aValues);
$fVariance = 0.0;
foreach (
$aValues as $i)
{
$fVariance += pow($i - $fMean, 2);
}
$fVariance /= ( $bSample ? count($aValues) - 1 : count($aValues) );
return (float)
sqrt($fVariance);
}
Sharon
14 年前
如果您没有 stat 包,可以使用以下函数

<?php

// 用于计算值平方 - 平均值的函数
function sd_square($x, $mean) { return pow($x - $mean,2); }

// 用于计算标准差(使用 sd_square) 的函数
function sd($array) {

// 平方和的平方根除以 N-1
return sqrt(array_sum(array_map("sd_square", $array, array_fill(0,count($array), (array_sum($array) / count($array)) ) ) ) / (count($array)-1) );
}

?>
tripollite at gmail dot com
12 年前
用于计算值平方 - 平均值的函数

<?php
function sd_square($x, $mean) { return pow($x - $mean,2); }
?>

用于计算标准差(使用 sd_square) 的函数
<?php
function sd($array) {

// 平方和的平方根除以 N-1
return sqrt(array_sum(array_map("sd_square", $array, array_fill(0,count($array), (array_sum($array) / count($array)) ) ) ) ) / (count($array)) );
}
?>

如果你不加 1 到计数,效果会更好

常数的标准差必须为 0 ( http://en.wikipedia.org/wiki/Standard_deviation )

不同的方法
<?php
class Tmath{
public static function
variance($data, $round = 2)
{
if(
count($data) == 0 )
return
NULL;
$total_ecart = 0;
$moyenne = self::moyenne($data, 10*$round);
if(
$moyenne == 0)
return
0;
foreach(
$data as $element)
{
$total_ecart += pow($element, 2);
}
return
round($total_ecart/count($data) - pow($moyenne,2),$round);
}
public static function
ecartType($data, $round = 2)
{
return
round(sqrt(self::variance($data,10*$round)),2);
}
public static function
moyenne($data, $round = 2)
{
if(
count($data) == 0 )
return
NULL;
return
round(array_sum($data)/count($data),$round) ;
}
}
?>
pmcdougl at gac dot edu
12 年前
应该知道,这个函数也会将数组的所有值转换为浮点数。如果你传递一个整数数组,它们将作为浮点数数组输出。

$data = array(2,3,3,3,3,2,5);
var_dump($data);
$standardDeviation = stats_standard_deviation($data);
var_dump($data);

打印
数组
0 => int 2
1 => int 3
2 => int 3
3 => int 3
4 => int 3
5 => int 2
6 => int 5
数组
0 => float 2
1 => float 3
2 => float 3
3 => float 3
4 => float 3
5 => float 5
6 => float 2
To Top