Class: Array
- Inherits:
-
Object
- Object
- Array
- Defined in:
- lib/nyaplot/monkeys.rb
Instance Method Summary collapse
-
#mean ⇒ Object
Find the numeric mean.
-
#median ⇒ Object
Find the single median or the mean of medians.
-
#modes ⇒ Object
Note: Not guaranteed to be the fastest way to find the modes, but I didn’t see this function as a bottleneck worth a ton of effort.
Instance Method Details
#mean ⇒ Object
Find the numeric mean. nils are ignored.
3 4 5 6 7 8 9 10 |
# File 'lib/nyaplot/monkeys.rb', line 3 def mean ary = self.to_a.compact if defined?(NMatrix) # Prefer the C version. ary.to_nm.mean[0] else # Fall back to Ruby. ary.inject(0) { |x,i| x + i } / ary.size.to_f end end |
#median ⇒ Object
Find the single median or the mean of medians. nils are ignored.
14 15 16 17 18 19 20 21 22 23 |
# File 'lib/nyaplot/monkeys.rb', line 14 def median ary = self.to_a.compact.sort.uniq return nil if ary.empty? if ary.size % 2 == 1 # Even number of entries ary[(ary.size-1) / 2] else # Odd number of entries idx = (ary.size-1) / 2 (ary[idx] + ary[idx+1]) / 2.0 end end |
#modes ⇒ Object
Note: Not guaranteed to be the fastest way to find the modes, but I didn’t see this function as a bottleneck worth a ton of effort. –JW
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/nyaplot/monkeys.rb', line 28 def modes ary = self.sort.compact return nil if ary.empty? h = {} ary.each do |k| if h.has_key?(k) h[k] += 1 else h[k] = 1 end end return nil if h.keys.empty? max_key = h.keys.first h.each_pair do |k,count| next if count.nil? || h[max_key].nil? max_key = k if count > h[max_key] end mode_count = h[max_key] h.select { |k,v| v == mode_count }.keys.sort end |