title: binning data in python with scipy/numpy
body: <p>is there a more efficient way to take an average of an array in prespecified bins? for example, i have an array of numbers and an array corresponding to bin start and end positions in that array, and I want to just take the mean in those bins? I have code that does it below but i am wondering how it can be cut down and improved. thanks.</p>
  
  <pre><code>from scipy import *
  from numpy import *
  
  def get_bin_mean(a, b_start, b_end):
      ind_upper = nonzero(a &gt;= b_start)[0]
      a_upper = a[ind_upper]
      a_range = a_upper[nonzero(a_upper &lt; b_end)[0]]
      mean_val = mean(a_range)
      return mean_val
  
  
  data = rand(100)
  bins = linspace(0, 1, 10)
  binned_data = []
  
  n = 0
  for n in range(0, len(bins)-1):
      b_start = bins[n]
      b_end = bins[n+1]
      binned_data.append(get_bin_mean(data, b_start, b_end))
  
  print binned_data
  </code></pre>