parameters: (a, axis=None, weights=None, returned=False)
docstring: Compute the weighted average along the specified axis.
  
      Parameters
      ----------
      a : array_like
          Array containing data to be averaged. If `a` is not an array, a
          conversion is attempted.
      axis : int, optional
          Axis along which to average `a`. If `None`, averaging is done over
          the flattened array.
      weights : array_like, optional
          An array of weights associated with the values in `a`. Each value in
          `a` contributes to the average according to its associated weight.
          The weights array can either be 1-D (in which case its length must be
          the size of `a` along the given axis) or of the same shape as `a`.
          If `weights=None`, then all data in `a` are assumed to have a
          weight equal to one.
      returned : bool, optional
          Default is `False`. If `True`, the tuple (`average`, `sum_of_weights`)
          is returned, otherwise only the average is returned.
          If `weights=None`, `sum_of_weights` is equivalent to the number of
          elements over which the average is taken.
  
  
      Returns
      -------
      average, [sum_of_weights] : {array_type, double}
          Return the average along the specified axis. When returned is `True`,
          return a tuple with the average as the first element and the sum
          of the weights as the second element. The return type is `Float`
          if `a` is of integer type, otherwise it is of the same type as `a`.
          `sum_of_weights` is of the same type as `average`.
  
      Raises
      ------
      ZeroDivisionError
          When all weights along axis are zero. See `numpy.ma.average` for a
          version robust to this type of error.
      TypeError
          When the length of 1D `weights` is not the same as the shape of `a`
          along axis.
  
      See Also
      --------
      mean
  
      ma.average : average for masked arrays -- useful if your data contains
                   "missing" values
  
      Examples
      --------
      >>> data = range(1,5)
      >>> data
      [1, 2, 3, 4]
      >>> np.average(data)
      2.5
      >>> np.average(range(1,11), weights=range(10,0,-1))
      4.0
  
      >>> data = np.arange(6).reshape((3,2))
      >>> data
      array([[0, 1],
             [2, 3],
             [4, 5]])
      >>> np.average(data, axis=1, weights=[1./4, 3./4])
      array([ 0.75,  2.75,  4.75])
      >>> np.average(data, weights=[1./4, 3./4])
      Traceback (most recent call last):
      ...
      TypeError: Axis must be specified when shapes of a and weights differ.
docstring_summary: Compute the weighted average along the specified axis.
docstring_tokens: Compute the weighted average along the specified axis .
function: def average(a, axis=None, weights=None, returned=False):
      """
      Compute the weighted average along the specified axis.
  
      Parameters
      ----------
      a : array_like
          Array containing data to be averaged. If `a` is not an array, a
          conversion is attempted.
      axis : int, optional
          Axis along which to average `a`. If `None`, averaging is done over
          the flattened array.
      weights : array_like, optional
          An array of weights associated with the values in `a`. Each value in
          `a` contributes to the average according to its associated weight.
          The weights array can either be 1-D (in which case its length must be
          the size of `a` along the given axis) or of the same shape as `a`.
          If `weights=None`, then all data in `a` are assumed to have a
          weight equal to one.
      returned : bool, optional
          Default is `False`. If `True`, the tuple (`average`, `sum_of_weights`)
          is returned, otherwise only the average is returned.
          If `weights=None`, `sum_of_weights` is equivalent to the number of
          elements over which the average is taken.
  
  
      Returns
      -------
      average, [sum_of_weights] : {array_type, double}
          Return the average along the specified axis. When returned is `True`,
          return a tuple with the average as the first element and the sum
          of the weights as the second element. The return type is `Float`
          if `a` is of integer type, otherwise it is of the same type as `a`.
          `sum_of_weights` is of the same type as `average`.
  
      Raises
      ------
      ZeroDivisionError
          When all weights along axis are zero. See `numpy.ma.average` for a
          version robust to this type of error.
      TypeError
          When the length of 1D `weights` is not the same as the shape of `a`
          along axis.
  
      See Also
      --------
      mean
  
      ma.average : average for masked arrays -- useful if your data contains
                   "missing" values
  
      Examples
      --------
      >>> data = range(1,5)
      >>> data
      [1, 2, 3, 4]
      >>> np.average(data)
      2.5
      >>> np.average(range(1,11), weights=range(10,0,-1))
      4.0
  
      >>> data = np.arange(6).reshape((3,2))
      >>> data
      array([[0, 1],
             [2, 3],
             [4, 5]])
      >>> np.average(data, axis=1, weights=[1./4, 3./4])
      array([ 0.75,  2.75,  4.75])
      >>> np.average(data, weights=[1./4, 3./4])
      Traceback (most recent call last):
      ...
      TypeError: Axis must be specified when shapes of a and weights differ.
  
      """
      if not isinstance(a, np.matrix) :
          a = np.asarray(a)
  
      if weights is None :
          avg = a.mean(axis)
          scl = avg.dtype.type(a.size/avg.size)
      else :
          a = a + 0.0
          wgt = np.array(weights, dtype=a.dtype, copy=0)
  
          # Sanity checks
          if a.shape != wgt.shape :
              if axis is None :
                  raise TypeError(
                          "Axis must be specified when shapes of a "\
                          "and weights differ.")
              if wgt.ndim != 1 :
                  raise TypeError(
                          "1D weights expected when shapes of a and "\
                          "weights differ.")
              if wgt.shape[0] != a.shape[axis] :
                  raise ValueError(
                          "Length of weights not compatible with "\
                          "specified axis.")
  
              # setup wgt to broadcast along axis
              wgt = np.array(wgt, copy=0, ndmin=a.ndim).swapaxes(-1, axis)
  
          scl = wgt.sum(axis=axis)
          if (scl == 0.0).any():
              raise ZeroDivisionError(
                      "Weights sum to zero, can't be normalized")
  
          avg = np.multiply(a, wgt).sum(axis)/scl
  
      if returned:
          scl = np.multiply(avg, 0) + scl
          return avg, scl
      else:
          return avg
function_tokens: def average ( a , axis = None , weights = None , returned = False ) : if not isinstance ( a , np . matrix ) : a = np . asarray ( a ) if weights is None : avg = a . mean ( axis ) scl = avg . dtype . type ( a . size / avg . size ) else : a = a + 0.0 wgt = np . array ( weights , dtype = a . dtype , copy = 0 ) # Sanity checks if a . shape != wgt . shape : if axis is None : raise TypeError ( "Axis must be specified when shapes of a " "and weights differ." ) if wgt . ndim != 1 : raise TypeError ( "1D weights expected when shapes of a and " "weights differ." ) if wgt . shape [ 0 ] != a . shape [ axis ] : raise ValueError ( "Length of weights not compatible with " "specified axis." ) # setup wgt to broadcast along axis wgt = np . array ( wgt , copy = 0 , ndmin = a . ndim ) . swapaxes ( - 1 , axis ) scl = wgt . sum ( axis = axis ) if ( scl == 0.0 ) . any ( ) : raise ZeroDivisionError ( "Weights sum to zero, can't be normalized" ) avg = np . multiply ( a , wgt ) . sum ( axis ) / scl if returned : scl = np . multiply ( avg , 0 ) + scl return avg , scl else : return avg