# NumPy average()

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()`.

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

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