gpt4 book ai didi

java - 如何从一组数字中计算平均值、中位数、众数和范围

转载 作者:IT老高 更新时间:2023-10-28 20:33:34 31 4
gpt4 key购买 nike

是否有任何函数(作为数学库的一部分)可以计算 mean 、中位数、众数和范围来自一组数字。

最佳答案

是的,似乎确实有第三个库(Java Math 中没有)。出现的两个是:

http://opsresearch.com/app/

http://www.iro.umontreal.ca/~simardr/ssj/indexe.html

但是,编写自己的方法来计算均值、中位数、众数和范围实际上并不难。

平均

public static double mean(double[] m) {
double sum = 0;
for (int i = 0; i < m.length; i++) {
sum += m[i];
}
return sum / m.length;
}

中位数

// the array double[] m MUST BE SORTED
public static double median(double[] m) {
int middle = m.length/2;
if (m.length%2 == 1) {
return m[middle];
} else {
return (m[middle-1] + m[middle]) / 2.0;
}
}

模式

public static int mode(int a[]) {
int maxValue, maxCount;

for (int i = 0; i < a.length; ++i) {
int count = 0;
for (int j = 0; j < a.length; ++j) {
if (a[j] == a[i]) ++count;
}
if (count > maxCount) {
maxCount = count;
maxValue = a[i];
}
}

return maxValue;
}

更新

正如 Neelesh Salpe 所指出的,上述内容不适用于多模式集合。我们可以很容易地解决这个问题:

public static List<Integer> mode(final int[] numbers) {
final List<Integer> modes = new ArrayList<Integer>();
final Map<Integer, Integer> countMap = new HashMap<Integer, Integer>();

int max = -1;

for (final int n : numbers) {
int count = 0;

if (countMap.containsKey(n)) {
count = countMap.get(n) + 1;
} else {
count = 1;
}

countMap.put(n, count);

if (count > max) {
max = count;
}
}

for (final Map.Entry<Integer, Integer> tuple : countMap.entrySet()) {
if (tuple.getValue() == max) {
modes.add(tuple.getKey());
}
}

return modes;
}

添加

如果您使用的是 Java 8 或更高版本,您还可以像这样确定模式:

public static List<Integer> getModes(final List<Integer> numbers) {
final Map<Integer, Long> countFrequencies = numbers.stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

final long maxFrequency = countFrequencies.values().stream()
.mapToLong(count -> count)
.max().orElse(-1);

return countFrequencies.entrySet().stream()
.filter(tuple -> tuple.getValue() == maxFrequency)
.map(Map.Entry::getKey)
.collect(Collectors.toList());
}

关于java - 如何从一组数字中计算平均值、中位数、众数和范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4191687/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com