我想在您的支持下解决这个问题。假设变量 $ar 中有一个数组,并且这个数组中存在 5 个数字,所以我想通过 Pascal 或 PHP 编程语言计算这些数字的几何平均值。我能怎么做 ?
问问题
2281 次
3 回答
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.
如果你想使用动态数组,这应该在Delphi
或ObjectPascal
例如完成。
于 2012-05-25T09:29:26.280 回答
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
于 2012-05-19T16:05:43.803 回答
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
结果,请尝试降低它。
于 2015-10-14T12:16:09.543 回答