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