我试图用PHP执行标准偏差。
我使用此功能创建了there,因为stats_standard_deviation doesn't seem to be reliable
<?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"
的{{1}}。
答案 0 :(得分: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)) );