首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算PHP中每5个数字的标准差

计算PHP中每5个数字的标准差
EN

Stack Overflow用户
提问于 2014-03-03 05:38:04
回答 2查看 956关注 0票数 1

我有一系列数字如下所示。但是,我只能计算整个数组的标准偏差,只有输出1的结果如下所示:

代码:

代码语言:javascript
复制
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>";

结果:

代码语言:javascript
复制
standard_deviation = 7.10004

有人知道如何计算的标准差每5个数字吗?因此,输出将是:

代码语言:javascript
复制
standard_deviation_1 = 3.11448
standard_deviation_2 = 5.70088
standard_deviation_3 = 4.82701
standard_deviation_4 = 4.39318
EN

回答 2

Stack Overflow用户

发布于 2014-03-03 05:48:57

您正在寻找array_chunk(); --它会将数组拆分为给定大小的更小的数组,因此您的代码现在如下:

代码语言:javascript
复制
$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()循环,如下所示:

代码语言:javascript
复制
for($i = 0; $i < count($a); $i++){
  echo "standard_deviation_" . ($i + 1) . " " . standard_deviation_sample($a[$i]);
}
票数 2
EN

Stack Overflow用户

发布于 2014-03-03 06:13:34

答案是使用array_chunk(),但是您还可以对代码本身进行一些改进:

代码语言:javascript
复制
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的初始值开始,内部函数将平方差相加在一起。

代码语言:javascript
复制
$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));
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22139411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档