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
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.