我在Ruby中创建一个boxplot生成器,我需要计算一些东西。
假设我有这个数组:
arr = [1, 5, 7, 2, 53, 65, 24]
如何从上面的数组中找到最低值(1),最高值(65),总数(157),平均值(22.43)和中位数(7)?
由于
答案 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)已经非常快了,所以如果你不打算处理庞大的数据集(如果你还需要对数据进行排序),那么你就可以了。