【问题标题】:Filter Standard Deviation using PHP [closed]使用 PHP 过滤标准偏差 [关闭]
【发布时间】:2021-01-31 18:44:07
【问题描述】:

我想用我的标准差结果过滤我将添加多少级别。 这些是我需要做的步骤:

  1. 根据数组值计算标准差。 (解决)

  2. 求数组值的平均值并与标准差结果相加。 例如:平均值 = -49.7 s.d = 3.37

因此,我需要继续添加该值,直到获得新的数字列表。 例如:-49.7、-46.33、-42.96、-39.59

之后,我只需要过滤打印从 -49.7 到 -39.59 的数组值。

有人可以帮我解决这个问题吗?

【问题讨论】:

标签: php arrays filtering standard-deviation trilateration


【解决方案1】:

这是我能理解的问题的脚本。

如果您需要任何解释或代码不是您想要的,请在评论部分告诉我。

<?php 

$array = [2,4,6,8,10];

$resultList = "";
$resultList_rounded = "";

function standardDeviation($array){

    //sum of all values
    $sum = array_sum($array);

    //sum of (square of values)
    $sum_of_square = array_sum(array_map(function($value){return $value*$value;},$array));

    //X Bar
    $xBar = average($array);

    //variance
    $variance = ($sum_of_square/count($array))-pow($xBar,2);

    //standard deviation
    return sqrt($variance);
}

function average($array){
    return (array_sum($array)/count($array));
}

function newList($array,$rounded=false,$round_digits = 4){
    $newarray = [];
    $sd = standardDeviation($array);
    $avg = average($array);

    for($i=1;$i<=count($array);$i++){
        if(empty($newarray)){
            array_push($newarray,$avg);
            continue;
        }
        if(!$rounded){
        array_push($newarray,$array[$i-1]+$sd);
        }else{
        array_push($newarray,number_format((float) ($array[$i-1]+$sd), $round_digits, '.', ''));
        }
    }
    return implode(',',$newarray);
}

function getRange($array){
    return $array[0]." to ".$array[count($array)-1];
}

//get new list
$resultList = newList($array,true,0); 
/*In the line above this, replace false with true if you want the rounded version and false if you want non rounded version. 4 means the number of digits to round.
examples:
$resultList = newList($array,true,4); will print 6,6.8284,8.8284,10.8284,12.8284
$resultList = newList($array,false,4);  will print 6,6.8284271247462,8.8284271247462,10.828427124746,12.828427124746
$resultList = newList($array,true,0); will print 6,7,9,11,13
$resultList = newList($array,true,1); will print 6,6.8,8.8,10.8,12.8
*/

//print the new result list
echo $resultList;

【讨论】:

  • 非常感谢先生帮助我。基于代码示例的输出:6 到 12.828427124746。因此,如何过滤数组以仅打印从 6 到 12.828427124746 的 6、8、10?
  • 我已经更新了代码,阅读倒数第二行之前的段落,以查看并更改您将获得的输出。
  • 非常感谢先生!我设法根据您的参考找到解决方案。
猜你喜欢
  • 2018-05-17
  • 1970-01-01
  • 1970-01-01
  • 2019-08-16
  • 2013-10-05
  • 2020-05-25
  • 2014-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多