相关文章推荐

The numpy.average() method computes the weighted average along the specified axis.

Example

import numpy as np # create an array array1 = np.array([0, 1, 2, 3, 4, 5, 6, 7])
# calculate the average of the array avg = np.average(array1)
print(avg) # Output: 3.5

average() Syntax

The syntax of the numpy.average() method is:

numpy.average(array, axis = None, weights = None, returned = False, keepdims = <no value>)

average() Arguments

The numpy.average() method takes the following arguments:

  • array - array containing numbers whose average is desired (can be array_like )
  • axis (optional) - axis or axes along which the averages are computed ( int or tuple of int )
  • weights (optional) - the weights associated with each value in array ( array_like )
  • returned (optional) - return tuple (average, sum_of_weights) if True , else return average only.
  • keepdims (optional) - specifies whether to preserve the shape of the original array ( bool )
  • Notes: The default values of numpy.average() have the following implications:

  • axis = None - the average of the entire array is taken.
  • weights = None - all values have the same weight ( 1 )
  • By default, keepdims will not be passed.
  • average() Return Value

    The numpy.average() method returns the weighted average of the array.

    Example 1: Find the Average of a ndArray

    import numpy as np # create an array array1 = np.array([[[0, 1], [2, 3]], [[4, 5], [6, 7]]])
    # find the average of entire array average1 = np.average(array1) # find the average across axis 0 average2 = np.average(array1, 0) # find the average across axis 0 and 1 average3 = np.average(array1, (0, 1))
    print('\naverage of the entire array:', average1) print('\naverage across axis 0:\n', average2) print('\naverage across axis 0 and 1:', average3)

    Output

    average of the entire array: 3.5 average across axis 0: [[2. 3.] [4. 5.]] average across axis 0 and 1: [3. 4.]

    Example 2: Specifying Weights for Values of a ndArray

    The weights parameter can be used to control the weight of each value in the input array.

    import numpy as np array1= np.array([[1, 2, 3], [4, 5, 6]])
    # by default all values have the same weight(1) result1 = np.average(array1) # assign variable weights result2 = np.average(array1, weights = np.arange(0,6,1).reshape(2, 3)) # assign 0 weight to first column # to get average of 2nd and 3rd column result3 = np.average(array1, weights = [0, 1, 1], axis = 1)
    print('No weights given:', result1) print('Variable weights:', result2) print('Average of 2nd and 3rd columns:', result3)

    Output

    No weights given: 3.5 Variable weights: 4.666666666666667 Average of 2nd and 3rd columns: [2.5 5.5]

    When weights is not assigned, numpy.average() works the same as numpy.mean() .

    average = (1 + 2 + 3 + 4 + 5 + 6) / 6 = 21 / 6 = 3.5

    When weights is passed, the weighted average is taken.

    For example, in result2 ,

    weighted average = sum(values * weights) / sum(weights) = (1 * 0 + 2 * 1 + 3 * 2+ 4 * 3 + 5 * 4 + 6 * 5) / (15) = 4.666666666667

    Example 3: Using Optional keepdims Argument

    If keepdims is set to True , the resultant average array is of the same number of dimensions as the original array.

    import numpy as np array1= np.array([[1, 2, 3], [4, 5, 6]])
    # keepdims defaults to False result1 = np.average(array1, axis = 0) # pass keepdims as True result2 = np.average(array1, axis = 0, keepdims = True)
    print('Dimensions in original array:',arr.ndim) print('Without keepdims:', result1, 'with dimensions', result1.ndim) print('With keepdims:', result2, 'with dimensions', result2.ndim)

    Output

    Dimensions in original array: 2 Without keepdims: [2.5 3.5 4.5] with dimensions 1 With keepdims: [[2.5 3.5 4.5]] with dimensions 2

    Example 4: Using Optional returned Argument

    The returned parameter allows to specify whether the return value should include just the calculated average or if it should include a tuple of the form (average, sum_of_weights) .

    import numpy as np array1= np.array([[1, 2, 3], [4, 5, 6]])
    # by default, returned = False # only average is returned avg = np.average(array1) # return the average and sum of weights avg2,sumWeights = np.average(array1, returned = True)
    print('Average:', avg) print('Average:', avg2, 'with sum of weights:', sumWeights )

    Output

    Average: 3.5 Average: 3.5 with sum of weights: 6.0

    Frequently Asked Questions

    What happens when all weights are zeroes?

    If all the weights are zeroes, we get ZeroDivisionError .

    Let's look at an example.

    import numpy as np array1= np.array([[1, 2, 3], [4, 5, 6]]) weights = np.zeros(6).reshape(2, 3) # compute average, by default returned = False, only average returned avg = np.average(array1, weights = weights) print('Average:', avg)

    Output

    ZeroDivisionError: Weights sum to zero, can't be normalized
    What happens when the length of weights is different from the length of the array?

    When the length of weights is not the same as the length of an array along the given axis, we get TypeError .

    Let's look at an example.

    import numpy as np array1= np.array([1, 2, 3, 4, 5, 6]) weights = np.ones(5) # the length of array is 6 whereas the length of weights is 5 avg = np.average(array1, weights = weights) print('Average:', avg)

    Output

    TypeError: Axis must be specified when shapes of a and weights differ.

    If the length of weights and the length of the array along the specified axis don't match, we get ValueError .

    import numpy as np array1= np.array([1, 2, 3, 4, 5, 6]) weights = np.ones(5) # the length of array is 6 whereas the length of weights is 5 avg = np.average(array1, weights = weights, axis = 0) print('Average:', avg)

    Output

    ValueError: Length of weights not compatible with specified axis.
     
    推荐文章