0

我正在尝试使用 PHP 执行标准偏差。

我使用了我在那里创建的这个函数,因为 stats_standard_deviation似乎不可靠

    <?php 
    class TestController extends \BaseController {

         function MyFunction() {
             $array = array('1','2','3','4');
             function sd_square($x, $mean) { return pow($x - $mean,2); } 

             function sd($array) { 
                      return sqrt(array_sum(array_map("sd_square", $array, array_fill(0,count($array), (array_sum($array) / count($array)) ) ) ) / (count($array)) ); 
             } 
    } return sd($array)
} ?> 

问题是array_map() expects parameter 1 to be a valid callback, function 'sd_square' not found or invalid function name当我尝试使用它时它会返回我。

在这里查看一些帖子,我尝试更改"sd_square""self::sd_square"or array($this, "sq_square")

4

1 回答 1

1

这种回避了问题(你应该解决它),但sq_square足够小你可能想考虑简单地内联

改变:

return sqrt(array_sum(array_map("sd_square", $array, array_fill(0,count($array), (array_sum($array) / count($array)) ) ) ) / (count($array)) );

到:

return sqrt(array_sum(array_map(function ($x, $mean) { return pow($x - $mean,2); }, $array, array_fill(0,count($array), (array_sum($array) / count($array)) ) ) ) / (count($array)) );

或者:

$sd_square = function ($x, $mean) { return pow($x - $mean,2); };
return sqrt(array_sum(array_map($sd_square, $array, array_fill(0,count($array), (array_sum($array) / count($array)) ) ) ) / (count($array)) );
于 2013-12-09T17:25:51.840 回答