matlab (octave) "hist" idiom
matlab (and octave) has histogram and 2D data indexing:
data = [1, 2, 3, 4; 2, 4, 6, 8; 3, 6, 9, 12; 5, 10, 15, 20]; dmin = min(data(:)) dmax = max(data(:)) his = hist(data(:), (dmin:dmax)); num = sum(his) mean = sum(his .* dmin:dmax) / num data(data > mean)
This produces output:
dmin = 1 dmax = 20 num = 16 mean = 6.8750 ans = 10 9 15 8 12 20
In ruby
data = [1, 2, 3, 4, 2, 4, 6, 8, 3, 6, 9, 12, 5, 10, 15, 20]; dmin = data.min; dmax = data.max; his = data.inject(Hash.new(0)) { |hash, x| hash[x] += 1; hash } num = data.length; mean = Float( his.inject(0){|m, p| k, v = p; m + k*v} ) / num; data.each{|v| p v if v > mean }
Output:
8 9 12 10 15 20