首先,我已经用 PHP 编程了整整两个星期。所以,请原谅我的无知。
这是我的问题。我试图找到一个数组中多个差值的运行平均值。我想我已经想出了如何得到我想要的东西,但是代码效率真的很低,并且在一个小的测试数组(n = 20)中需要几秒钟。我的生产数组将在 n = 1000 左右。我怀疑有一种更有效的方法可以得到我想要的东西。这是我在概念上尝试做的事情:
array = (20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1);
newarray = (20-19, 19-18, 18-17, 17-16, 16-15, ... 2-1);
newarray2 = (20-18, 19-17, 18-16, 17-15, 16-14 ... 3-1);
newarray3 = (20-17, 19-16, 18-15, 17-14, ... 4-1);
differenceaverage = (sum of (20-19, 20-18, 20-17)/3, sum of (19-18, 19-17, 19-16)/3, etc.)
这是我用来生成平均值的代码:
$n=count($appArrayqb);
for($i = 1; $i<=($n-1); $i++){
$diff[]= $appArrayqb[$i-1]-$appArrayqb[$i];
}
for($i = 1; $i<=($n-2); $i++){
$diff2[]= $appArrayqb[$i-1]-$appArrayqb[$i+1];
}
for($i = 1; $i<=($n-3); $i++){
$diff3[]= $appArrayqb[$i-1]-$appArrayqb[$i+2];
}
$VOcomb = array($diff,$diff2,$diff3)
$sumVO = array_map ("sum", $VOcomb[0], $VOcomb[1], $VOcomb[2])
function sum ($arr1, $arr2, $arr3){
return($arr1+$arr2+$arr3);
}
$counts = array();
foreach($VOcomb as $item){
foreach($item as $k=>$v){
if(isset($item[$k])){
$counts[$k]++;
}
}
}
$VOarray=array($sumVO,$counts);
$VO = array_map("VO", $VOarray[0],$VOarray[1]);
function VO($arr1, $arr2) {
return($arr1/$arr2);
}
顺便说一句,当代码工作时,我在运行计数循环时收到未定义的偏移通知,因为它试图计算 $item 数组中不存在的值。所以我有三个相关的问题:1.)有没有更好的方法来计算差异?2.)有没有更好的方法来计算差异,这样我就不会得到一个未定义的偏移量?3.) array_map 函数是用来获得总和和平均值的最佳函数吗?
谢谢!