PHP运行多个数组值差异的平均值

PHP运行多个数组值差异的平均值,php,Php,首先,我已经用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 = (

首先,我已经用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);
}
$n=计数($qb);

对于($i=1;$i请尝试此简化代码,它似乎给出了与您相同的结果:

它的工作原理是逐个元素构建结果数组,根据需要计算差异和平均值,而不是创建差异数组并映射它们

// Calculate average differences between E(n) and E(n+1), E(n+2), and E(n+3)
// in an array 
function diffaverages($appArrayqb) {
  $n = count($appArrayqb);
  $diffAvg = array();
  for($i = 0; $i+1 < $n; $i++){
    $diffsum = 0;
    $count = 0;
    for($j = 1; $j <= 3 && $i+$j < $n; $j++){
      $diffsum += $appArrayqb[$i] - $appArrayqb[$i+$j];
      $count++;
    }
    $diffAvg[] = $diffsum / $count;
  }
  return $diffAvg;
}
//计算E(n)和E(n+1)、E(n+2)和E(n+3)之间的平均差值
//排列
函数diffaverages($rayqb){
$n=计数($qb);
$diffAvg=array();
对于($i=0;$i+1<$n;$i++){
$diffsum=0;
$count=0;

对于($j=1;$j),我不明白这是为了什么。你的预期输出是什么?你到底想做什么?这是一个更聪明的解决方案。谢谢!