从Ruby中的数组中查找最高,最低,总计,平均值和中位数

时间:2010-06-03 15:49:34

标签: ruby math arrays boxplot

我在Ruby中创建一个boxplot生成器,我需要计算一些东西。

假设我有这个数组:

arr = [1, 5, 7, 2, 53, 65, 24]

如何从上面的数组中找到最低值(1),最高值(65),总数(157),平均值(22.43)和中位数(7)?

由于

2 个答案:

答案 0 :(得分:61)

lowest = arr.min
highest = arr.max
total = arr.inject(:+)
len = arr.length
average = total.to_f / len # to_f so we don't get an integer result
sorted = arr.sort
median = len % 2 == 1 ? sorted[len/2] : (sorted[len/2 - 1] + sorted[len/2]).to_f / 2

答案 1 :(得分:1)

找到最小值,最大值,总和和平均值是微不足道的,并且可以在线性时间内轻松完成,如上面的sepp2k答案所示。

找到中位数不那么简单,天真的实现(排序,然后采用中间元素)在O(nlogn)时间内运行。

然而,有一些算法可以找到线性时间的中位数(例如5的算法中位数)。其他人甚至可以为任何类型的订单统计工作(比方说,你想要找到第5个最小元素)。这些问题是你必须自己实现它们,我知道没有Ruby实现。

O(nlogn)已经非常快了,所以如果你不打算处理庞大的数据集(如果你还需要对数据进行排序),那么你就可以了。