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 bearray_like
)axis
(optional) - axis or axes along which the averages are computed (int
ortuple of int
)weights
(optional) - the weights associated with each value in array (array_like
)returned
(optional) - return tuple(average, sum_of_weights)
ifTrue
, 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()
.
For example, in result1,
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
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
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.