簡體   English   中英

如何計算加權平均值?

[英]How to calculate a weighted mean?

我的語言是PHP,但算法應該相當普遍。

我有一個(比方說)評級的關聯數組和給出評級的次數。

$ratings = array(
    1 => 1,
    2 => 3,
    3 => 6,
    4 => 3,
    5 => 3
);

這相當於: [1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5] ,但考慮到我正在使用的數字,從第一種形式轉換到第二種形式是非常低效的。

計算上述數字平均值的算法是什么?

嘗試這個:

$total = 0;
$count = 0;
foreach($ratings as $number=>$frequency) {
  $total += $number * $frequency;
  $count += $frequency;
}
return $total / $count;

這不行嗎?

$total = 0;
$sum = 0;
foreach ($ratings as $k => $v) {
  $total += $k * $v;
  $sum += $v;
}
echo $total / $sum;

編輯:嗯,我看起來很傻,因為有人打敗了我。 那好吧。

懷疑我可以擊敗接受的答案,但我發現內置循環函數比腳本循環運行得更快。 不確定對$ multiply的調用將如何優化。 如果這真的很慢,那么我希望有人會在評論中指出它。

function multiply( $k , $v ) { return $k * $v; }
return array_sum( array_map( 'multiply' , array_keys($ratings) , $ratings ) ) / array_sum( $ratings );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM