求个 加权几何平均数 的写法

druidAAAA 2017-04-19 09:51:53
这个是我查到的几何平均数写法
加权的怎么算呢各位高手?

private static double GeometricMean(double[] arr)
{
double result = 1;
foreach (double num in arr)
{
result *= Math.Pow(num, 1.0 / arr.Length);
}
return result;
}
...全文
508 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2017-04-29
  • 打赏
  • 举报
回复
xuzuning 2017-04-29
  • 打赏
  • 举报
回复
少做 arrr.Length - 1 次 Math.Pow 1.0 / arr.Length 是定值,不必在循环里重复计算
druidAAAA 2017-04-28
  • 打赏
  • 举报
回复
引用 3 楼 xuzuning 的回复:
另,建议你的几何平均数方法写作
        //几何平均数
        private static double GeometricMean(double[] arr)
        {
            double result = 1;
            foreach (double num in arr)
            {
                result *= num;
            }
            return Math.Pow(result, 1.0 / arr.Length);
        }
多谢你啦, 请问你这个写法比我查到的好在哪里, 是更快一些吗?
threenewbee 2017-04-20
  • 打赏
  • 举报
回复
foreach (var item in 集合) avg += item.值 * item.权重百分比 得到结果即是
xuzuning 2017-04-20
  • 打赏
  • 举报
回复
另,建议你的几何平均数方法写作
        //几何平均数
        private static double GeometricMean(double[] arr)
        {
            double result = 1;
            foreach (double num in arr)
            {
                result *= num;
            }
            return Math.Pow(result, 1.0 / arr.Length);
        }
xuzuning 2017-04-20
  • 打赏
  • 举报
回复
        //加权几何平均数
private static double WeightingGeometricMean(double[] arr)
{
var p = arr.GroupBy(x => x).ToDictionary(x => x.Key, x => x.Count()); //获取集合中各成员出现的次数
double result = 1;
double f = 0;
foreach (double num in arr)
{
result *= Math.Pow(num, p[num]);
f += p[num];
}
return Math.Pow(result, 1.0 / f);
}

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧