如何计算几何平均值(pascal或php)

时间:2012-05-19 15:56:22

标签: php arrays pascal average

我想在你的支持下解决这个问题。  假设有一个名为$ ar的变量数组,并且在这个数组中存在5个数字,所以我想通过Pascal或PHP编程语言计算这些数字的几何平均值。我该怎么办?

3 个答案:

答案 0 :(得分:1)

以下是PHP版本:

function geometric_average($a) {  
   foreach($a as $i=>$n) $mul = $i == 0 ? $n : $mul*$n;  
   return pow($mul,1/count($a));  
}

//usage
echo geometric_average(array(2,8)); //Output-> 4

答案 1 :(得分:1)

“标准”Pascal中的可能解决方案:

program GeometricAvarage;

const SIZE = 5;

function GeoAvg(A:array of real):real;
var
  avg: real;
  i: integer;

begin
avg := 1;
for i:=0 to (SIZE) do
  avg := avg * A[i];
avg :=Exp(1/SIZE*Ln(avg));
Result:=avg;
end;

begin

var
ar: array [1..SIZE] of real :=(1,2,3,4,5);

writeln('Geometric Avarage = ', GeoAvg(ar)); {Output should be =~2.605}
readln;
end.

如果您想使用动态数组,则应在DelphiObjectPascal中完成此操作。

答案 2 :(得分:0)

对于那些遇到此问题的人,正如我在PHP答案的评论中所述,该答案可能并不适合所有人,尤其是那些希望找到大数或大数量的几何平均值/均值的人PHP中的数字根本不会存储它。

非常简单的解决方案是将初始数组拆分为块,计算均值然后乘以它们:

function geometricMean(array $array)
{
    if (!count($array)) {
        return 0;
    }

    $total = count($array);
    $power = 1 / $total;

    $chunkProducts = array();
    $chunks = array_chunk($array, 10);

    foreach ($chunks as $chunk) {
        $chunkProducts[] = pow(array_product($chunk), $power);
    }

    $result = array_product($chunkProducts);
    return $result;
}

注意10 - 它是块中元素的数量,如果需要,可以更改它。如果你得到INF,请尝试降低它。