如何从数组中求平均值?
如果我有一个数组:
[0,4,8,2,5,0,2,6]
平均得到3.375。
如何从数组中求平均值?
如果我有一个数组:
[0,4,8,2,5,0,2,6]
平均得到3.375。
当前回答
还有一个简单的解决方案
arr = [0,4,8,2,5,0,2,6]
arr.sum(0.0) / arr.size
其他回答
比.inject更快的解决方案是:
sum(0.0)/arr.size
参见这篇文章参考:https://andycroll.com/ruby/calculate-a-mean-average-from-a-ruby-array/
arr = [0,4,8,2,5,0,2,6]
average = arr.inject(&:+).to_f / arr.size
# => 3.375
你可以试试下面的方法:
a = [1,2,3,4,5]
# => [1, 2, 3, 4, 5]
(a.sum/a.length).to_f
# => 3.0
我非常喜欢定义一个mean()方法,这样我的代码更有表现力。
默认情况下我通常会忽略nil,这是我定义的
def mean(arr)
arr.compact.inject{ |sum, el| sum + el }.to_f / arr.compact.size
end
mean([1, nil, 5])
=> 3.0
如果您想保留nils,只需删除两个.compact。
数组添加#平均水平。
我经常做同样的事情,所以我认为用一个简单的平均方法扩展Array类是谨慎的。除了整数、浮点数或小数之类的数字数组之外,它并不适用于任何东西,但当你正确使用它时,它很方便。
我使用Ruby on Rails,所以我把它放在配置/initializers/array中。Rb但是你可以把它放在boot中包含的任何地方,等等。
配置/初始化/ array.rb
class Array
# Will only work for an Array of numbers like Integers, Floats or Decimals.
#
# Throws various errors when trying to call it on an Array of other types, like Strings.
# Returns nil for an empty Array.
#
def average
return nil if self.empty?
self.sum.to_d / self.size
end
end