从双精度数组计算统计数据

3
我有一个双精度值的数组。我想从该数组的所有值中计算最大值和平均值。
目前,我只是迭代数组并计算数字,一切都正常。但我觉得奇怪的是,我必须实现这样基本的方法。我在Java API中寻找是否有可以执行此类操作的方法,但我没有找到任何...我错过了什么吗?
我在这里搜索,但我只找到了一堆例子,他们以与我相同的方式实现它。
3个回答

3
你可以使用像Apache Commons Math这样的库。使用StatUtils,它有一系列有用的静态方法,可以轻松地实现你所需的功能。
只需下载该库并将其添加到项目依赖项中即可。
以下是使用此库的示例:
// Just building an array with double values
int size = 10;
double measurements[] = new double[size];

for (int i = 0; i < measurements.length; i++)
{
    measurements[i] = i;
}

// Using the Apache functions
double myAverage = StatUtils.mean (measurements);
double myMax = StatUtils.max (measurements);

1
这个库非常有用!只花了我不到5分钟的时间就添加了新的maven依赖并测试了你的代码。我知道我不应该自己实现这个功能。StatUtils真的是非常方便的工具! :) - user3241475

1

Java 8引入了几种原始流(double、long、int),其中包括统计功能。它看起来像这样:

double[] array = {1, 2, 3, 5, 3};
DoubleSummaryStatistics stats = Arrays.stream(array).summaryStatistics();
System.out.println(stats.getMax());
System.out.println(stats.getAverage());

0

你所描述的代码非常简单,大多数情况下没有必要提供一个通用库来提供它,特别是因为很多时候都有各种选项,比如是否同时计算最小值、最大值等。

话虽如此,Java 8正在引入全新的集合处理API,它将(除了许多其他非常强大的功能之外)允许你做到这一点。

更多信息请参见:

http://java.dzone.com/articles/java-streams-api-preview

http://zeroturnaround.com/rebellabs/java-8-explained-applying-lambdas-to-java-collections/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接