web-dev-qa-db-fra.com

comment accéder aux éléments d'un tableau 2D?

Je suis nouveau sur Python et je voudrais comprendre comment on va manipuler les éléments d’un tableau . Si j’ai par exemple:

a= ( a11 a12 a13 )  and b = (b11 b12 b13) 
     a21 a22 a23             b21 b22 b23

Je les ai définis en python comme par exemple:

a=[[1,1],[2,1],[3,1]]
b=[[1,2],[2,2],[3,2]]

J'ai vu que je ne pouvais pas faire référence à a[1][1] mais à a[1] qui me donne un résultat de [2,1]. Alors, je ne comprends pas comment accéder à la deuxième ligne de ces tableaux? Ce serait a21, a22, a23, b21, b22, b23? Et comment le ferais-je pour le multiplier par c1 = a21*b21, c2 = a22*b22, etc.? 

14
caran

Si tu as

a=[[1,1],[2,1],[3,1]]
b=[[1,2],[2,2],[3,2]]

Ensuite

a[1][1]

Cela fonctionnera bien. Il pointe vers la deuxième colonne, deuxième rangée, comme vous le souhaitiez.

Je ne suis pas sûr de ce que tu as fait de mal.

Pour multiplier les cellules de la troisième colonne, vous pouvez simplement faire

c = [a[2][i] * b[2][i] for i in range(len(a[2]))] 

Ce qui fonctionnera pour un nombre quelconque de lignes.

Edit: Le premier numéro correspond à la colonne, le second à la ligne avec votre mise en page actuelle. Ils sont tous deux numérotés de zéro . Si vous voulez changer l'ordre, vous pouvez le faire

a = Zip(*a)

ou vous pouvez le créer de cette façon:

a=[[1, 2, 3], [1, 1, 1]]
13
agf

Si vous souhaitez effectuer plusieurs calculs avec un tableau 2d, vous devez utiliser le tableau NumPy au lieu de la liste d'imbrication.

pour votre question, vous pouvez utiliser: Zip (* a) pour le transposer: 

In [55]: a=[[1,1],[2,1],[3,1]]
In [56]: Zip(*a)
Out[56]: [(1, 2, 3), (1, 1, 1)]
In [57]: Zip(*a)[0]
Out[57]: (1, 2, 3)
3
HYRY

Examinez attentivement le nombre de crochets dans votre tableau. J'ai rencontré un exemple lorsque la fonction retournait la réponse avec un crochet supplémentaire, comme celui-ci:

>>>approx
array([[[1192,  391]],
       [[1191,  409]],
       [[1209,  438]],
       [[1191,  409]]])

Et ça n'a pas marché

>>> approx[1,1]
IndexError: index 1 is out of bounds for axis 1 with size 1

Cela pourrait ouvrir les crochets:

>>> approx[:,0]
array([[1192,  391],
       [1191,  409],
       [1209,  438],
       [1191,  409]])

Il est maintenant possible d'utiliser une notation d'accès d'élément ordinaire: 

>>> approx[:,0][1,1]
409
0
Uladzimir Simankou

Semble travailler ici:

>>> a=[[1,1],[2,1],[3,1]]
>>> a
[[1, 1], [2, 1], [3, 1]]
>>> a[1]
[2, 1]
>>> a[1][0]
2
>>> a[1][1]
1
0
cdhowie

a[1][1] fonctionne comme prévu. Voulez-vous dire a11 en tant que premier élément de la première ligne? Parce que ce serait un [0] [0].

0
Kenji