Dans numpy.sum()
il y a un paramètre appelé keepdims
. Qu'est ce que ça fait?
Comme vous pouvez le voir ici dans la documentation: http://docs.scipy.org/doc/numpy/reference/generated/numpy.sum.html
numpy.sum(a, axis=None, dtype=None, out=None, keepdims=False)[source]
Sum of array elements over a given axis.
Parameters:
...
keepdims : bool, optional
If this is set to True, the axes which are reduced are left in the result as
dimensions with size one. With this option, the result will broadcast
correctly against the input array.
...
@Ney @hpaulj est correct, vous devez expérimenter, mais je soupçonne que vous ne réalisez pas que la sommation pour certains tableaux peut se produire le long des axes. Observez ce qui suit lors de la lecture de la 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])
Vous remarquerez que si vous ne spécifiez pas d'axe (deux premiers exemples), le résultat numérique est le même, mais le keepdims = True
a renvoyé un 2D
tableau avec le nombre 6, tandis que la deuxième incarnation a renvoyé un scalaire. De même, lors de la sommation le long de axis 1
(sur plusieurs lignes), un 2D
le tableau est renvoyé lorsque keepdims = True
. Le dernier exemple, le long de axis 0
(colonnes du bas), montre une caractéristique similaire ... les dimensions sont conservées lorsque keepdims = True
.
L'étude des axes et de leurs propriétés est essentielle pour une compréhension complète de la puissance de NumPy lorsqu'il s'agit de données multidimensionnelles.
Un exemple montrant keepdims
en action lorsque vous travaillez avec des tableaux de dimension supérieure. Voyons comment la forme du tableau change lorsque nous effectuons différentes réductions:
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