116 votes

comment l'axe est indexé dans le tableau de numpy ?

En Le tutoriel de Numpy L'axe peut être indexé avec des nombres entiers, comme suit 0 est pour la colonne, 1 est pour les rangées, mais je ne comprends pas pourquoi elles sont indexées de cette façon ? Et comment puis-je déterminer l'index de chaque axe lorsque je travaille avec un tableau multidimensionnel ?

181voto

nneonneo Points 56821

Par définition, le numéro d'axe de la dimension est l'index de cette dimension dans le tableau. shape . C'est également la position utilisée pour accéder à cette dimension lors de l'indexation.

Par exemple, si un tableau 2D a a la forme (5,6), alors vous pouvez accéder à a[0,0] jusqu'à a[4,5] . L'axe 0 est donc la première dimension (les "rangées"), et l'axe 1 est la deuxième dimension (les "colonnes"). Dans les dimensions supérieures, où "ligne" et "colonne" n'ont plus vraiment de sens, essayez de penser aux axes en termes de formes et d'indices impliqués.

Si vous le faites .sum(axis=n) par exemple, alors la dimension n est réduite et supprimée, chaque valeur de la nouvelle matrice étant égale à la somme des valeurs réduites correspondantes. Par exemple, si b a une forme (5,6,7,8) et vous le faites. c = b.sum(axis=2) puis l'axe 2 (dimension de taille 7) est écrasé, et le résultat a la forme suivante (5,6,8) . En outre, c[x,y,z] est égal à la somme de tous les éléments b[x,y,:,z] .

98voto

debaonline4u Points 507

Si quelqu'un a besoin de cette description visuelle d'un shape=(3,5) le tableau :

Numpy array axis 0 and 1

26voto

Lstyle Points 91

Vous pouvez saisir l'axe de cette manière :

>>> a = np.array([[[1,2,3],[2,2,3]],[[2,4,5],[1,3,6]],[[1,2,4],[2,3,4]],[[1,2,4],[1,2,6]]])
array([[[1, 2, 3],
    [2, 2, 3]],

   [[2, 4, 5],
    [1, 3, 6]],

   [[1, 2, 4],
    [2, 3, 4]],

   [[1, 2, 4],
    [1, 2, 6]]])
>>> a.shape
(4,2,3)

J'ai créé un tableau d'une forme avec des valeurs différentes (4,2,3) afin que vous puissiez distinguer clairement la structure. Un axe différent signifie une couche différente.

C'est-à-dire, axis = 0 indexe la première dimension de la forme (4,2,3) . Il fait référence aux tableaux de la première [] . Il contient 4 éléments, sa forme est donc 4 :

  array[[1, 2, 3],
        [2, 2, 3]],

  array[[2, 4, 5],
        [1, 3, 6]],

  array[[1, 2, 4],
        [2, 3, 4]],

  array[[1, 2, 4],
        [1, 2, 6]]

axis = 1 indexer la deuxième dimension de la forme (4,2,3) . Il y a 2 éléments dans chaque tableau de la couche : axis = 0 ,e.c. Dans le tableau de

 array[[1, 2, 3],
       [2, 2, 3]]

. Ces deux éléments sont :

array[1, 2, 3]

array[2, 2, 3]

Et la troisième valeur de forme signifie qu'il y a 3 éléments dans chaque élément du tableau de la couche : axis = 2 . e.c. Il y a 3 éléments dans array[1, 2, 3] . C'est explicite.

De plus, vous pouvez déterminer les axes/dimensions à partir du nombre d'éléments suivants [] au début ou à la fin. Dans ce cas, le nombre est 3( [[[ ), vous pouvez donc choisir axis de axis = 0 , axis = 1 y axis = 2 .

11voto

ndas Points 11

En général, axe = 0, signifie que toutes les cellules de la première dimension varient avec chaque valeur de la deuxième et de la troisième dimension, et ainsi de suite.

Par exemple, un tableau à deux dimensions a deux axes correspondants : le premier est vertical et traverse les lignes (axe 0), le second est horizontal et traverse les colonnes (axe 1).

Pour la 3D, cela devient complexe, donc, utilisez plusieurs boucles for.

>>> x = np.array([[[ 0,  1,  2],
    [ 3,  4,  5],
    [ 6,  7,  8]],
   [[ 9, 10, 11],
    [12, 13, 14],
    [15, 16, 17]],
   [[18, 19, 20],
    [21, 22, 23],
    [24, 25, 26]]])

>>> x.shape #(3, 3, 3)

#axis = 0 
>>> for j in range(0, x.shape[1]):
      for k in range(0, x.shape[2]):
        print( "element = ", (j,k), " ", [ x[i,j,k] for i in range(0, x.shape[0]) ])
...
element =  (0, 0)   [0, 9, 18]             #sum is 27
element =  (0, 1)   [1, 10, 19]            #sum is 30
element =  (0, 2)   [2, 11, 20]
element =  (1, 0)   [3, 12, 21]
element =  (1, 1)   [4, 13, 22]
element =  (1, 2)   [5, 14, 23]
element =  (2, 0)   [6, 15, 24]
element =  (2, 1)   [7, 16, 25]
element =  (2, 2)   [8, 17, 26]

>>> x.sum(axis=0)            
array([[27, 30, 33],
       [36, 39, 42],
       [45, 48, 51]])

#axis = 1    
for i in range(0, x.shape[0]):
    for k in range(0, x.shape[2]):
        print( "element = ", (i,k), " ", [ x[i,j,k] for j in range(0, x.shape[1]) ])

element =  (0, 0)   [0, 3, 6]      #sum is 9 
element =  (0, 1)   [1, 4, 7]
element =  (0, 2)   [2, 5, 8]
element =  (1, 0)   [9, 12, 15]
element =  (1, 1)   [10, 13, 16]
element =  (1, 2)   [11, 14, 17]
element =  (2, 0)   [18, 21, 24]
element =  (2, 1)   [19, 22, 25]
element =  (2, 2)   [20, 23, 26]

# for sum, axis is the first keyword, so we may omit it,

>>> x.sum(0), x.sum(1), x.sum(2)
(array([[27, 30, 33],
        [36, 39, 42],
        [45, 48, 51]]),
 array([[ 9, 12, 15],
        [36, 39, 42],
        [63, 66, 69]]),
 array([[ 3, 12, 21],
        [30, 39, 48],
        [57, 66, 75]]))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X