【问题标题】:Median Absolute Deviation in JavaJava中的中值绝对偏差
【发布时间】:2017-07-29 07:25:43
【问题描述】:

如何从列表中计算Median Absolute Deviation (MAD) in Java(例如List<Double> list)?

我在我不知道的语言(例如in C#in R)中发现了一些关于stackoverflow 的实现,但它们都不是Java 的。

【问题讨论】:

  • 那么您在将 C# 和 R 实现转换为 Java 时遇到了什么问题?
  • 我不知道 C# 和 R。我真的不明白为什么我得到这么多反对票。请在投票后立即在 cmets 部分进行解释。
  • 如果您了解 Java,您会发现学习 C# 很容易,两者非常相似。您可能想尝试学习足够多的 C# 来使用您找到的代码——它至少在 2 个方面很有用:(1)您为手头的问题找到一个可行的解决方案,(2)您拥有一项新技能。
  • 感谢您的建议@RobertDodier,但我的时间真的很短!稍后我会考虑尝试 C#。目前,Krzysztof 的回答满足了我的需要:)

标签: java statistics


【解决方案1】:

计算中位数: 您可以使用Arrays.sort()input 数组进行排序,然后if arrayLength%2==0 然后median 值是(array[array.length/2-1] + array[array.length/2])/2 否则中位数是(array[array.length/2])

计算 MAD: 创建Double[] intermediate - new Double[array.length] 并使用intermediate[i] = Math.abs(input[i]-median) 为每个元素计算intermediate 数组,然后以与第一步相同的方式计算intermediate 数组的中位数,您就准备好了。

我为你做的例子:

import java.util.Arrays;
import java.util.List;

public class MAD {

    public static void main(String[] args) {
        List<Double> input = Arrays.asList(new Double[] {1d, 1d, 2d, 2d, 4d, 6d, 9d});
        System.out.println(mad(input));
    }

    private static Double mad(List<Double> inputList) {
        Double[] input = inputList.toArray(new Double[inputList.size()]);
        Double median = median(input);
        arrayAbsDistance(input, median);
        return median(input);

    }

    private static void arrayAbsDistance(Double[] array, Double value) {
        for (int i=0; i<array.length;i++) {
            array[i] = Math.abs(array[i] - value);
        }
    }

    private static Double median(Double[] input) {
        if (input.length==0) {
            throw new IllegalArgumentException("to calculate median we need at least 1 element");
        }
        Arrays.sort(input);
        if (input.length%2==0) {
            return (input[input.length/2-1] + input[input.length/2])/2;
        } 
        return input[input.length/2];
    }
}

【讨论】:

  • 感谢您的评论。如何继续使用列表 (List&lt;Double&gt; list) 而不是数组? (我刚刚编辑了我的问题)
  • 再看我的回答,相信你能从中学到一些东西:)
  • 再次感谢您的帮助!为什么将massArray.length == 1 视为不同的情况?不能已经包含在“奇数个元素”的情况下?
  • 你是对的,它已经包含在“奇数个元素”的情况下。我相信你也可以接受我的回答是正确的。
猜你喜欢
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
  • 1970-01-01
  • 2014-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多