Résumé de la spécification des options d'axe de Python "numpy.sum (...)"

introduction

Ceci est un résumé des ** options d'axe ** qui peuvent être spécifiées avec numpy.ndarray.sum (...) et numpy.ndarray.mean (...). Nous expliquerons l'utilisation de figures pour des tableaux numpy en 2 et 3 dimensions.

Pour un tableau numpy à deux dimensions

Tout d'abord, ciblez un tableau numpy à deux dimensions (ndim = 2). À titre d'exemple, considérons les éléments suivants ** 3 lignes 4 colonnes ** ** tableau numpy à 2 dimensions ** </ font> x.

m1.png

Ce tableau «x» peut être généré avec le code suivant.

shape=(3,4)Générer un tableau numpy de


import numpy as np
x = np.arange(1,12+1).reshape(3,4)
print(x)
#print(x.ndim)  # -> 2
#print(x.shape) # -> (3, 4)

Résultat d'exécution


[ [ 1  2  3  4]
  [ 5  6  7  8]
  [ 9 10 11 12] ]

Spécifiez ʻaxis = None`

Puisque ʻaxis = Noneest l'argument par défaut,x.sum ()etx.sum (axis = None)` ont le même comportement. Référence pour numpy.sum (...) / numpy.ndarray.sum (...)

sum(axis=None)


s = x.sum(axis=None)
# print(type(s)) # -> <class 'numpy.int64'>
# print(s.ndim)  # -> 0
# print(s.shape) # -> ()
print(s)

Si ʻaxis = None` est spécifié, la somme de ** tous les éléments qui composent le tableau ** est calculée. Plus précisément, $ 1 + 2 + 3 + \ cdots + 11 + 12 = $ $ \ bf {78} $ </ font> est calculé.

Résultat d'exécution


78

Spécifiez ʻaxis = 0`

sum(axis=0)


s = x.sum(axis=0)
# print(type(s)) # -> <class 'numpy.ndarray'>
# print(s.ndim)  # -> 1
# print(s.shape) # -> (4,)
print(s)

Résultat d'exécution


[15 18 21 24]

Si vous spécifiez ʻaxis = 0`, les éléments sont ** additionnés dans le sens des lignes **. Plus précisément, $ 1 + 5 + 9 = $ $ \ bf {15} $ </ font>, $ 2 + 6 + 10 = $ $ \ bf {18} $ </ font>, $ 3 + 7 + 11 = $ $ \ bf {21} $ </ font>, $ 4 + 8 + 12 = $ $ \ Bf {24} $ </ font> est calculé comme étant «[15 18 21 24]».

ma0.png ma0s.png

** [Attention]: Les éléments sont additionnés dans le sens de la ligne (le sens dans lequel la ligne devient 0, 1, 2, 3, ...), pas la somme des éléments de chaque ligne. Veuillez noter que ** </ font> (Si vous vous méprenez ici, vous tomberez dans ??? à la fois (histoire d'expérience)).

Spécifiez ʻaxis = 1`

sum(axis=1)


s = x.sum(axis=1)
# print(type(s)) # -> <class 'numpy.ndarray'>
# print(s.ndim)  # -> 1
# print(s.shape) # -> (3,)
print(s)

Résultat d'exécution


[10 26 42]

Si ʻaxis = 1est spécifié, les éléments sont additionnés dans la direction de la colonne ** (la direction dans laquelle la colonne devient plus grande que 0, 1, 2, 3, ...) **. Plus précisément, $ 1 + 2 + 3 + 4 = $ <font color = 'red'> $ \ bf {10} $ </ font>, $ 5 + 6 + 7 + 8 = $ <font color = 'red' > $ \ Bf {26} $ </ font>, $ 9 + 10 + 11 + 12 = $ <font color = 'red'> $ \ bf {42} $ </ font> est calculé[10 26 42 ] ».

ma1.png ma1s.png

Pour le tableau numpy 3D

Ensuite, nous allons cibler un tableau numpy en trois dimensions. A titre d'exemple, nous allons travailler avec le tableau numpy x avec la forme (3,4,2).

shape=(3,4,2)Générer un tableau numpy de


import numpy as np
x = np.arange(1,24+1).reshape(3,4,2)
print(x)
# print(x.ndim)  # -> 3
# print(x.shape) # -> (3, 4, 2)

Résultat de l'exécution (la position du saut de ligne est formatée pour la lisibilité)


[  [  [ 1  2]  [ 3  4] [ 5  6]  [ 7  8]  ]
   [  [ 9 10]  [11 12]  [13 14]  [15 16]  ] 
   [  [17 18]  [19 20]  [21 22]  [23 24]  ]  ]

Si vous dessinez séparément avec ʻaxis = 2`, ce sera comme suit.

m2.png

Spécifiez ʻaxis = None`

sum(axis=None)


s = x.sum(axis=None)
# print(type(s)) # -> <class 'numpy.int64'>
# print(s.ndim)  # -> 0
# print(s.shape) # -> ()
print(s)

** Total pour tous les éléments **. Plus précisément, $ 1 + 2 + 3 + 4 + \ cdots + 22 + 23 + 24 = 300 $ est calculé.

Résultat d'exécution


300

Spécifiez ʻaxis = 0`

sum(axis=0)


s = x.sum(axis=0)
# print(type(s)) # -> <class 'numpy.ndarray'>
# print(s.ndim)  # -> 2
# print(s.shape) # -> (4, 2)
print(s)

Résultat d'exécution


[ [27 30]
  [33 36]
  [39 42]
  [45 48] ]

En spécifiant ʻaxis = 0`, les éléments sont additionnés dans le ** sens des lignes **.

Le premier élément [27 30] du résultat d'exécution ci-dessus est $ 1 + 9 + 17 = $ $ \ bf {27} $ </ font>, $ 2 + 10 + 18 = $ C'est le résultat calculé comme suit: $ \ bf {30} $ </ font>.

m2a0.png m2as.png

x, qui était shape = (3,4,2), devient shape = (4,2) avec x.sum (axis = 0).

Spécifiez ʻaxis = 1`

sum(axis=1)


s = x.sum(axis=1)
# print(type(s)) # -> <class 'numpy.ndarray'>
# print(s.ndim)  # -> 2
# print(s.shape) # -> (3, 2)
print(s)

Résultat d'exécution


[ [16 20]
  [48 52]
  [80 84] ]

En spécifiant ʻaxis = 1, les éléments sont additionnés dans la ** direction de la colonne **. Le premier élément [16 20]` du résultat d'exécution ci-dessus est $ 1 + 3 + 5 + 7 = $ $ \ bf {16} $ </ font>, $ 2 + 4 + 6 + C'est le résultat calculé comme suit: 8 = $ $ \ bf {20} $ </ font>.

m2a1.png m2a1s.png

x, qui était shape = (3,4,2), devient shape = (3,2) avec x.sum (axis = 1).

Spécifiez ʻaxis = 2`

sum(axis=2)


s = x.sum(axis=2)
# print(type(s)) # -> <class 'numpy.ndarray'>
# print(s.ndim)  # -> 2
# print(s.shape) # -> (3, 4)
print(s)

Résultat d'exécution


[ [ 3  7 11 15]
  [19 23 27 31]
  [35 39 43 47] ]

En spécifiant ʻaxis = 2, les éléments sont additionnés dans la ** direction du canal ** s'il s'agit d'une image. Le premier élément supérieur gauche 3 du résultat d'exécution ci-dessus est $ 1 + 2 = $ <font color = 'red'> $ \ bf {3} $ </ font>, et l'élément inférieur droit 47` est $ 23 + 24 = C'est le résultat calculé comme suit: $ $ \ bf {47} $ </ font>.

m2a2.png m2a2s.png

x, qui était shape = (3,4,2), devient shape = (3,4) with x.sum (axis = 2).

Spécifiez ʻaxis = (0,1) `

À partir de NumPy 1.7, l'axe peut être spécifié comme un taple.

En spécifiant ʻaxis = (0,1) , ** le total des lignes et des colonnes ** est calculé. Le résultat est le même même si ʻaxis = (1,0) (l'ordre n'a pas d'importance).

sum(axis=(0,1))


s = x.sum(axis=(0,1))
#print(type(s)) # -> <class 'numpy.ndarray'>
#print(s.ndim)  # -> 1
#print(s.shape) # -> (2,)
print(s)

Résultat d'exécution


[144 156]

Le premier élément «144» du résultat de l'exécution est le résultat du calcul de la somme de tous les éléments de «x [:,:, 0]», soit $ 1 + 3 + 5 + 7 + \ cdots + 19 + 21 + 23 $. Devenir.

m2a01.png m2a01s.png

x, qui était shape = (3,4,2), devient shape = (2,) with x.sum (axis = (0,1)).

Spécifiez ʻaxis = (1,2) `

La même chose est vraie pour ʻaxis = (2,1) `.

sum(axis=(1,2))


s = x.sum(axis=(1,2))
# print(type(s)) # -> <class 'numpy.ndarray'>
# print(s.ndim)  # -> 1
# print(s.shape) # -> (3,)
print(s)

Résultat d'exécution


[ 36 100 164]

Le premier élément 36 du résultat de l'exécution est la somme des éléments dans le cadre bleu dans la figure ci-dessous **, c'est-à-dire que $ (1 + 3 + 5 + 7) + (2 + 4 + 6 + 8) $ est calculé. Le résultat est.

m2a12.png m2a12s.png

x, qui était shape = (3,4,2), devient shape = (3,) with x.sum (axis = (1,2)).

Spécifiez ʻaxis = (0,2) `

La même chose est vraie pour ʻaxis = (2,0) `.

sum(axis=(0,2))


s = x.sum(axis=(0,2))
# print(type(s)) # -> <class 'numpy.ndarray'>
# print(s.ndim)  # -> 1
# print(s.shape) # -> (4,)
print(s)

Résultat d'exécution


[57 69 81 93]

Le premier élément «57» du résultat de l'exécution est le résultat du calcul du ** total des éléments dans le cadre bleu ** dans la figure ci-dessous, c'est-à-dire $ (1 + 9 + 17) + (2 + 10 + 18) $. ..

m2a02.png m2a02s.png

x, qui était shape = (3,4,2), devient shape = (4,) with x.sum (axis = (0,2)).

Spécifiez ʻaxis = (0,1,2) `

sum (axis = (0,1,2)) est identique à sum (axis = None) ʻou sum () ʻet la somme de tous les éléments est calculée.

sum(axis=(0,1,2))


s = x.sum(axis=(0,1,2))
#print(type(s)) # -> <class 'numpy.int64'>
#print(s.ndim)  # -> 0
#print(s.shape) # -> ()
print(s)

Résultat d'exécution


300

x, qui était shape = (3,4,2), devient shape = (0) with x.sum (axis = (0,1,2)).

Recommended Posts