Hi, some time ago I needed the same thing and hacked the function
histogram (from numpy). Here goes my function, I hope it will result useful

Cheers,
        Juan

## Calculates the histogram allowing for overlapping bins, which are
given by
#
# @param a
# @param bins a sequence of pairs (left,right), limits for each bin
#
# @return hist (numpy array)
#         bin_centers (numpy array)
def myhistogram(a, bins):
  """
  Compute the histogram of a set of data.

  Parameters
  ----------
  a : array_like
      Input data.
  bins : sequence of pairs
      It defines the bin edges (left,right), allowing for non-uniform
bin widths.

  Returns
  -------
  hist : array
    The values of the histogram. See `normed` and `weights` for a
    description of the possible semantics.
  bin_centers : array of dtype float
    Return the bin centers ``(length(hist))``.

  Notes
  -----
  All but the last (righthand-most) bin is half-open.  In other words, if
  `bins` is::

    [1, 2, 3, 4]

  then the first bin is ``[1, 2)`` (including 1, but excluding 2) and the
  second ``[2, 3)``.  The last bin, however, is ``[3, 4]``, which *includes*
  4.

  Examples
  --------
  >>> myhistogram([1,2,1], bins=[(0,1),(1,1.5),(1.5,2.5),(2,3)])
  (array([0.5, 1.25, 2, 2.5]), array([0, 0, 1, 2, 3]))
  """
  bins = np.asarray(bins)               # bins are 2-dimensional arrays
of shape (n,2)
  if len(bins.shape) != 2 or bins.shape[1] != 2:
    raise AttributeError, 'bins must be a list/array of 2-tuples.'

  a = np.asarray(a)
  a =  a.ravel()
  n = np.zeros(len(bins), int)

  block = 65536
  for i in np.arange(0, len(a), block):
    sa = np.sort(a[i:i+block])
    n += np.r_[sa.searchsorted(bins[:-1,1], 'left'),
sa.searchsorted(bins[-1,1], 'right')]\
         - np.r_[sa.searchsorted(bins[:-1,0], 'left'),
sa.searchsorted(bins[-1,0], 'right')]
  return n, (bins[:,0]+bins[:,1])/2.

------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_sfd2d_oct
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to