@Ney @hpaulj is correct, you need to experiment, but I suspect you don't realize that summation for some arrays can occur along axes. Observe the following which reading the documentation

>>> a
array([[0, 0, 0],
       [0, 1, 0],
       [0, 2, 0],
       [1, 0, 0],
       [1, 1, 0]])
>>> np.sum(a, keepdims=True)
array([[6]])
>>> np.sum(a, keepdims=False)
6
>>> np.sum(a, axis=1, keepdims=True)
array([[0],
       [1],
       [2],
       [1],
       [2]])
>>> np.sum(a, axis=1, keepdims=False)
array([0, 1, 2, 1, 2])
>>> np.sum(a, axis=0, keepdims=True)
array([[2, 4, 0]])
>>> np.sum(a, axis=0, keepdims=False)
array([2, 4, 0])

You will notice that if you don't specify an axis (1st two examples), the numerical result is the same, but the keepdims = True returned a 2D array with the number 6, whereas, the second incarnation returned a scalar. Similarly, when summing along axis 1 (across rows), a 2D array is returned again when keepdims = True. The last example, along axis 0 (down columns), shows a similar characteristic... dimensions are kept when keepdims = True.
Studying axes and their properties is critical to a full understanding of the power of NumPy when dealing with multidimensional data.

Answer from user1121588 on Stack Overflow
Top answer
1 of 2
102

@Ney @hpaulj is correct, you need to experiment, but I suspect you don't realize that summation for some arrays can occur along axes. Observe the following which reading the documentation

>>> a
array([[0, 0, 0],
       [0, 1, 0],
       [0, 2, 0],
       [1, 0, 0],
       [1, 1, 0]])
>>> np.sum(a, keepdims=True)
array([[6]])
>>> np.sum(a, keepdims=False)
6
>>> np.sum(a, axis=1, keepdims=True)
array([[0],
       [1],
       [2],
       [1],
       [2]])
>>> np.sum(a, axis=1, keepdims=False)
array([0, 1, 2, 1, 2])
>>> np.sum(a, axis=0, keepdims=True)
array([[2, 4, 0]])
>>> np.sum(a, axis=0, keepdims=False)
array([2, 4, 0])

You will notice that if you don't specify an axis (1st two examples), the numerical result is the same, but the keepdims = True returned a 2D array with the number 6, whereas, the second incarnation returned a scalar. Similarly, when summing along axis 1 (across rows), a 2D array is returned again when keepdims = True. The last example, along axis 0 (down columns), shows a similar characteristic... dimensions are kept when keepdims = True.
Studying axes and their properties is critical to a full understanding of the power of NumPy when dealing with multidimensional data.

2 of 2
9

An example showing keepdims in action when working with higher dimensional arrays. Let's see how the shape of the array changes as we do different reductions:

import numpy as np
a = np.random.rand(2,3,4)
a.shape
# => (2, 3, 4)
# Note: axis=0 refers to the first dimension of size 2
#       axis=1 refers to the second dimension of size 3
#       axis=2 refers to the third dimension of size 4

a.sum(axis=0).shape
# => (3, 4)
# Simple sum over the first dimension, we "lose" that dimension 
# because we did an aggregation (sum) over it

a.sum(axis=0, keepdims=True).shape
# => (1, 3, 4)
# Same sum over the first dimension, but instead of "loosing" that 
# dimension, it becomes 1.

a.sum(axis=(0,2)).shape
# => (3,)
# Here we "lose" two dimensions

a.sum(axis=(0,2), keepdims=True).shape
# => (1, 3, 1)
# Here the two dimensions become 1 respectively
🌐
IncludeHelp
includehelp.com › python › what-does-the-keepdims-parameter-do-with-numpy-sum-function.aspx
Python - What does the 'keepdims' parameter do with numpy.sum() function?
If the default value is passed, then keepdims will not be passed through to the sum method of sub-classes of ndarray, however, any non-default value will be. If the sub-class' method does not implement keepdims any exceptions will be raised. ... # Import numpy import numpy as np # Creating a numpy array arr = np.array([[0, 0, 0], [0, 1, 0], [0, 2, 0], [1, 0, 0], [1, 1, 0]]) # Display original array print("Original array:\n",arr,"\n") # Calculating sum res = np.sum(arr, keepdims=True) # Display result print("Sum:\n",res)
Discussions

Dba = np.sum(dtanh,axis=1 or keepdims = True)
Hi friend and mentor, In the Exercise ... examples (axis= 1). Note that you should use the keepdims = True option." However, I got an error if I do that, my output will be just one number, not (5,1). Well, if I do dba = np.sum(dtanh,axis=1 ), then i think i got the right answer ... More on community.deeplearning.ai
🌐 community.deeplearning.ai
3
0
March 27, 2023
np.sum with keepdims fails when input is a 1d array
got the following error when running np.sum(a, axis=1, keepdims=True): TypeError: sum() got an unexpected keyword argument 'keepdims' when a.shape is (100,2) everything works fine but when ... More on github.com
🌐 github.com
4
May 6, 2017
python - Numpy sum keepdims error - Stack Overflow
Numerator is the exponential of the score function for the correct class and denominator is the sum of all the exponentials for all possible classes. ... What's your NumPy version? It sounds really old. ... The keepdims argument was added in NumPy 1.7. At least the docstring of np.sum (1.6) ... More on stackoverflow.com
🌐 stackoverflow.com
What is the role of keepdims in Numpy (Python)? - Stack Overflow
When I use np.sum, I encountered a parameter called keepdims. After looking up the docs, I still cannot understand the meaning of keepdims. keepdims: bool, optional If this is set to True, the axes More on stackoverflow.com
🌐 stackoverflow.com
🌐
NumPy
numpy.org › doc › 2.1 › reference › generated › numpy.sum.html
numpy.sum — NumPy v2.1 Manual
numpy.sum(a, axis=None, dtype=None, out=None, keepdims=<no value>, initial=<no value>, where=<no value>)[source]#
🌐
Note.nkmk.me
note.nkmk.me › home › python › numpy
NumPy: Meaning of the axis parameter (0, 1, -1) | note.nkmk.me
January 18, 2024 - However, keepdims=True ensures proper broadcasting. # print(a + np.sum(a, axis=1)) # ValueError: operands could not be broadcast together with shapes (3,4) (3,) print(a + np.sum(a, axis=1, keepdims=True)) # [[5 5 5 5] # [5 5 5 5] # [5 5 5 5]]
🌐
Programiz
programiz.com › python-programming › numpy › methods › sum
NumPy sum() (With Examples)
# pass the 'out' argument to store ... sum of array1 along axis=0 is stored in the array2 array. When keepdims = True, the dimensions of the resulting array matches the dimension of an input array....
🌐
DeepLearning.AI
community.deeplearning.ai › course q&a › deep learning specialization › sequence models
Dba = np.sum(dtanh,axis=1 or keepdims = True) - Sequence Models - DeepLearning.AI
March 27, 2023 - Hi friend and mentor, In the Exercise 5 - rnn_cell_backward of Building_a_Recurrent_Neural_Network_Step_by_Step, the hint said very clear that " To calculate dba , the ‘batch’ above is a sum across all ‘m’ examples (axis= 1). Note that you should use the keepdims = True option."
🌐
NumPy
numpy.org › doc › stable › reference › generated › numpy.sum.html
numpy.sum — NumPy v2.5 Manual
numpy.sum(a, axis=None, dtype=None, out=None, keepdims=<no value>, initial=<no value>, where=<no value>)[source]#
🌐
GeeksforGeeks
geeksforgeeks.org › python › numpy-sum-in-python
numpy.sum() in Python - GeeksforGeeks
January 30, 2026 - np.sum(arr, axis=1, keepdims=True) preserves the reduced dimension, returning a column-shaped result.
Find elsewhere
🌐
NumPy
numpy.org › doc › 2.3 › reference › generated › numpy.sum.html
numpy.sum — NumPy v2.3 Manual
numpy.sum(a, axis=None, dtype=None, out=None, keepdims=<no value>, initial=<no value>, where=<no value>)[source]#
🌐
DataCamp
datacamp.com › doc › numpy › sum
NumPy sum()
When maintaining the original dimensions' shape is crucial, set keepdims=True. Leverage array broadcasting. When summing over axes, ensure the array dimensions are compatible for efficient operations.
🌐
Sharp Sight
sharpsight.ai › blog › numpy-sum
How to Use the Numpy Sum Function - Sharp Sight
February 6, 2024 - But, it’s possible to change that behavior. If we set keepdims = True, the axes that are reduced will be kept in the output. So if you use np.sum on a 2-dimensional array and set keepdims = True, the output will be in the form of a 2-d array.
🌐
Educative
educative.io › answers › what-is-numpysum-in-python
What is numpy.sum() in Python?
numpy.sum(a, axis=None, dtype=None, out=None, keepdims=<no value>, initial=<no value>, where=<no value>)
🌐
GitHub
github.com › numpy › numpy › issues › 9064
np.sum with keepdims fails when input is a 1d array · Issue #9064 · numpy/numpy
May 6, 2017 - got the following error when running np.sum(a, axis=1, keepdims=True): TypeError: sum() got an unexpected keyword argument 'keepdims' when a.shape is (100,2) everything works fine but when a.shape is (1,2) i get this error got it solved ...
Author: numpy
🌐
Netalith
netalith.com › blogs › tutorial › numpysum-in-python
numpy sum python — Examples, axis, dtype, keepdims | Netalith
February 22, 2026 - import numpy as np arr = np.array([[1, 2], [3, 4]]) with_initial = np.sum(arr, axis=1, initial=10) print('Row sums with initial value 10:', with_initial) # Output: Row sums with initial value 10: [13 17] import numpy as np arr = np.arange(12).reshape(3,4) # keepdims=True preserves the axis as size 1 s = np.sum(arr, axis=1, keepdims=True) print('Shape with keepdims:', s.shape) print('Value with keepdims:', s) # Example output: Shape with keepdims: (3, 1)
🌐
Tutorial Gateway
tutorialgateway.org › python-numpy-sum
Python numpy sum
September 18, 2022 - numpy.sum(a, axis = None, dtype = None, out = None, keepdims = <no value>, initial = <no value>, where = <no value>)
🌐
EDUCBA
educba.com › home › software development › software development tutorials › numpy tutorial › numpy sum
NumPy sum | Working of NumPy sum() Function in Python with Examples
April 20, 2023 - Suppose we don’t want the resulting array dimension to reduce to the lesser dimension of the input array then we need to use the keepdims parameter in the sum() function to keep the dimension of the output array the same as the input array.
Address: Unit no. 202, Jay Antariksh Bldg, Makwana Road, Marol, Andheri (East),, 400059, Mumbai
Top answer
1 of 4
46

Consider a small 2d array:

In [180]: A=np.arange(12).reshape(3,4)
In [181]: A
Out[181]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

Sum across rows; the result is a (3,) array

In [182]: A.sum(axis=1)
Out[182]: array([ 6, 22, 38])

But to sum (or divide) A by the sum requires reshaping

In [183]: A-A.sum(axis=1)
...
ValueError: operands could not be broadcast together with shapes (3,4) (3,) 
In [184]: A-A.sum(axis=1)[:,None]   # turn sum into (3,1)
Out[184]: 
array([[ -6,  -5,  -4,  -3],
       [-18, -17, -16, -15],
       [-30, -29, -28, -27]])

If I use keepdims, "the result will broadcast correctly against" A.

In [185]: A.sum(axis=1, keepdims=True)   # (3,1) array
Out[185]: 
array([[ 6],
       [22],
       [38]])
In [186]: A-A.sum(axis=1, keepdims=True)
Out[186]: 
array([[ -6,  -5,  -4,  -3],
       [-18, -17, -16, -15],
       [-30, -29, -28, -27]])

If I sum the other way, I don't need the keepdims. Broadcasting this sum is automatic: A.sum(axis=0)[None,:]. But there's no harm in using keepdims.

In [190]: A.sum(axis=0)
Out[190]: array([12, 15, 18, 21])    # (4,)
In [191]: A-A.sum(axis=0)
Out[191]: 
array([[-12, -14, -16, -18],
       [ -8, -10, -12, -14],
       [ -4,  -6,  -8, -10]])

If you prefer, these actions might make more sense with np.mean, normalizing the array over columns or rows. In any case it can simplify further math between the original array and the sum/mean.

2 of 4
5

You can keep the dimension with "keepdims=True" if you sum a matrix For example:

import numpy as np
x  = np.array([[1,2,3],[4,5,6]])
x.shape
# (2, 3)

np.sum(x, keepdims=True).shape
# (1, 1)
np.sum(x, keepdims=True)
# array([[21]]) <---the reault is still a 1x1 array

np.sum(x, keepdims=False).shape
# ()
np.sum(x, keepdims=False)
# 21 <--- the result is an integer with no dimesion
🌐
DNMTechs
dnmtechs.com › understanding-the-keepdims-parameter-in-numpy-sum
Understanding the keepdims parameter in numpy.sum() – DNMTechs – Sharing and Storing Technology Knowledge
This parameter is particularly useful when working with multi-dimensional arrays and when we want to preserve the shape of the array after performing the summation operation. By using “keepdims=True”, we can obtain a result with the same number of dimensions as the input array, making it ...
🌐
JAX Documentation
docs.jax.dev › en › latest › _autosummary › jax.numpy.sum.html
jax.numpy.sum — JAX documentation
>>> jnp.sum(x, axis=1) Array([10, 16, 21], dtype=int32) If keepdims=True, ndim of the output is equal to that of the input.