it-swarm.com.de

wie kann ich auf Elemente in einem 2D-Array zugreifen?

Ich bin neu in Python und würde gerne verstehen, wie man die Elemente eines Arrays manipuliert. Wenn ich zum Beispiel:

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

Ich habe sie in Python wie zum Beispiel definiert:

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

Ich habe gesehen, dass ich nicht auf a[1][1] verweisen kann, sondern auf a[1], was mir ein Ergebnis von [2,1]____ ergibt. Ich verstehe also nicht, wie ich auf die zweite Zeile dieser Arrays zugreifen kann. Das wäre a21, a22, a23, b21, b22, b23? Und wie würde ich das tun, um sie als c1 = a21*b21, c2 = a22*b22 usw. zu multiplizieren? 

14
caran

Wenn Sie haben

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

Dann

a[1][1]

Funktioniert gut. Es zeigt auf die zweite Spalte, zweite Reihe, wie Sie es wollten.

Ich bin nicht sicher, was du falsch gemacht hast.

Um die Zellen in der dritten Spalte zu multiplizieren, können Sie dies einfach tun

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

Welches funktioniert für eine beliebige Anzahl von Zeilen.

Bearbeiten: Die erste Zahl ist die Spalte, die zweite Zahl ist die Zeile mit Ihrem aktuellen Layout. Sie sind beide von null nummeriert. Wenn Sie die Bestellung wechseln möchten, können Sie dies tun

a = Zip(*a)

oder Sie können es auf diese Weise erstellen:

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

Wenn Sie viele Berechnungen mit einem 2d-Array durchführen möchten, sollten Sie das NumPy-Array anstelle der Nestliste verwenden.

für Ihre Frage können Sie Folgendes verwenden: Zip (* a), um sie zu transponieren: 

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

Achten Sie genau darauf, wie viele Klammern Ihr Array enthält. Ich habe ein Beispiel getroffen, als die Funktion mit einer zusätzlichen Klammer antwortete:

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

Und das hat nicht funktioniert

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

Dies könnte die Klammern öffnen:

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

Nun ist es möglich, eine gewöhnliche Elementzugriffsnotation zu verwenden: 

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

Wenn du das hast:

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

Sie können einfach darauf zugreifen, indem Sie Folgendes verwenden:

print(a[0][2])
a[0][1] = 7
print(a)
0

Scheint hier zu funktionieren:

>>> 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] funktioniert wie erwartet. Meinst du a11 als erstes Element der ersten Reihe? Das wäre nämlich eine [0] [0].

0
Kenji