📄 07 - taking mean, median, and mode.rb
字号:
def mean(array) array.inject(0) { |sum, x| sum += x } / array.size.to_fendmean([1,2,3,4]) # => 2.5mean([100,100,100,100.1]) # => 100.025mean([-100, 100]) # => 0.0mean([3,3,3,3]) # => 3.0#---def median(array, already_sorted=false) return nil if array.empty? array = array.sort unless already_sorted m_pos = array.size / 2 return array.size % 2 == 1 ? array[m_pos] : mean(array[m_pos-1..m_pos])endmedian([1,2,3,4,5]) # => 3median([5,3,2,1,4]) # => 3median([1,2,3,4]) # => 2.5median([1,1,2,3,4]) # => 2median([2,3,-100,100]) # => 2.5median([1, 1, 10, 100, 1000]) # => 10#---def modes(array, find_all=true) histogram = array.inject(Hash.new(0)) { |h, n| h[n] += 1; h } modes = nil histogram.each_pair do |item, times| modes << item if modes && times == modes[0] and find_all modes = [times, item] if (!modes && times>1) or (modes && times>modes[0]) end return modes ? modes[1...modes.size] : modesendmodes([1,2,3,4]) # => nilmodes([1,1,2,3,4]) # => [1]modes([1,1,2,2,3,4]) # => [1, 2]modes([1,1,2,2,3,4,4]) # => [1, 2, 4]modes([1,1,2,2,3,4,4], false) # => [1]modes([1,1,2,2,3,4,4,4,4,4]) # => [4]#---def mean_without_float_conversion(array) array.inject(0) { |x, sum| sum += x } / array.sizeendrequire 'rational'numbers = [Rational(2,3), Rational(3,4), Rational(6,7)]mean(numbers)# => 0.757936507936508mean_without_float_conversion(numbers)# => Rational(191, 252)#---mean([1, 100, 100000]) # => 33367.0median([1, 100, 100000]) # => 100mean([1, 100, -1000000]) # => -333299.666666667median([1, 100, -1000000]) # => 1#---median(["a", "z", "b", "l", "m", "j", "b"])# => "j"median(["a", "b", "c", "d"])# TypeError: String can't be coerced into Fixnum#---def mean_and_standard_deviation(array) m = mean(array) variance = array.inject(0) { |variance, x| variance += (x - m) ** 2 } return m, Math.sqrt(variance/(array.size-1))end#All the items in the list are close to the mean, so the standard#deviation is low.mean_and_standard_deviation([1,2,3,1,1,2,1])# => [1.57142857142857, 0.786795792469443]#The outlier increases the mean, but also increases the standard deviation.mean_and_standard_deviation([1,2,3,1,1,2,1000])# => [144.285714285714, 377.33526837801]#---
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -