我有一系列数字如下所示。但是,我只能计算整个数组的标准偏差,只有输出1的结果如下所示:
代码:
function standard_deviation_sample ($a)
{
//variable and initializations
$the_standard_deviation = 0.0;
$the_variance = 0.0;
$the_mean = 0.0;
$the_array_sum = array_sum($a); //sum the elements
$number_elements = count($a); //count the number of elements
//calculate the mean
$the_mean = $the_array_sum / $number_elements;
//calculate the variance
for ($i = 0; $i < $number_elements; $i++)
{
//sum the array
$the_variance = $the_variance + ($a[$i] - $the_mean) * ($a[$i] - $the_mean);
}
$the_variance = $the_variance / ($number_elements - 1.0);
//calculate the standard deviation
$the_standard_deviation = pow( $the_variance, 0.5);
//return the variance
return $the_standard_deviation;
}
$a = array(1,2,3,4,9,6,7,8,9,20,11,12,13,14,2,16,17,18,19,27);
$standard_deviation = standard_deviation_sample ($a);
echo "standard_deviation = $standard_deviation<br>";结果:
standard_deviation = 7.10004有人知道如何计算的标准差每5个数字吗?因此,输出将是:
standard_deviation_1 = 3.11448
standard_deviation_2 = 5.70088
standard_deviation_3 = 4.82701
standard_deviation_4 = 4.39318发布于 2014-03-03 05:48:57
您正在寻找array_chunk(); --它会将数组拆分为给定大小的更小的数组,因此您的代码现在如下:
$a = array_chunk(array(1,2,3,4,9,6,7,8,9,20,11,12,13,14,2,16,17,18,19,27), 5);
foreach($a as $b){
echo "standard_deviation: " . standard_deviation_sample($b);
}参考资料:chunk
如果需要standard_deviation_1输出末尾的数字,可以将循环更改为for()循环,如下所示:
for($i = 0; $i < count($a); $i++){
echo "standard_deviation_" . ($i + 1) . " " . standard_deviation_sample($a[$i]);
}发布于 2014-03-03 06:13:34
答案是使用array_chunk(),但是您还可以对代码本身进行一些改进:
function standard_deviation_sample(array $a)
{
$the_mean = array_sum($a) / count($a);
return sqrt(array_reduce($a, function($result, $item) use ($the_mean) {
return $result + pow($item - $the_mean, 2);
}, 0) / (count($a) - 1));
}只要在需要变量的地方使用变量,函数本身就可以大大减少;其次,计算平方标准差是可以使用array_reduce()求解的一个很好的例子;从0的初始值开始,内部函数将平方差相加在一起。
$a = array(1,2,3,4,9,6,7,8,9,20,11,12,13,14,2,16,17,18,19,27);
foreach (array_chunk($a, 5) as $k => $sample) {
printf("standard_deviation_%d = %.5f<br>\n",
$k + 1,
standard_deviation_sample($sample));
}https://stackoverflow.com/questions/22139411
复制相似问题