Hallo Leute,
ich habe eine kurze Nachfrage zu der mir hoffentlich jemand einen Tipp oder eine Lösung geben kann.
Ich habe nämlich aufgrund der etwas komplizierten Optik einer Matrix bisher keine Idee und Internetrecherchen helfen mir bisher auch nichts.
Ich habe eine nxn-Matrix die in Python wie folgt dargestellt wird (hier als Beispiel eine 2x2-Matrix) [[1, 2], [3, 4]].
Wobei zur Vereinfachung Zeile mit z bezeichnet und Spalte mit s bezeichnet wird (sonst ist das immer i und j).
Nun möchte ich wie bereits angesprochen die Spur also die Summe der Hauptdiagonale berechnen, in diesem Fall 1+4=5.
Ich hoffe, dass mir hier jemand weiter helfen kann, denn ich habe danach schon noch ein paar weitere Dinge zu tun, die ich nicht vorgreifen möchte.
Danke auf jeden Fall schon einmal und bis dahin überlege ich mal weiter...
Spur einer Matrix berechnen
- pillmuncher
- User
- Beiträge: 1484
- Registriert: Samstag 21. März 2009, 22:59
- Wohnort: Pfaffenwinkel
Code: Alles auswählen
>>> m = [
... [1, 2, 3, 4],
... [2, 3, 4, 5],
... [3, 4, 5, 6],
... [4, 5, 6, 7]]
>>> sum(m[i][i] for i, _ in enumerate(m))
16
In specifications, Murphy's Law supersedes Ohm's.
Mit numpy:
@pillmuncher: wenn Du schon eine Schleife über die Zeilen hast, warum nutzt Du sie dann nicht?
Code: Alles auswählen
numpy.array([[1, 2], [3, 4]]).trace()
Code: Alles auswählen
sum(row[i] for i, row in enumerate(m))
Danke schon einmal für die beiden Antworten, aber es wäre schön, wenn mir nun noch jemand den Zweck von "enumerate" genauer erklären könnte und was mir auch unklar ist, ist die erste Antwort allgemein, da dort in der Schleife zweimal über i gegangen wird, was wohl die Zeilen sind.
Wie gesagt ich habe es zur Vereinfachung mit z für Zeile bezeichnet, aber egal. m ist die Bezeichnung für die Matrix, verstehe ich das richtig?
Noch eine Nachfrage an Sirius3, da ich Numpy nicht kenne: Was macht Numpy und wo bekomme ich das, mir scheint das so allerdings etwas getrickst?
Wie gesagt ich habe es zur Vereinfachung mit z für Zeile bezeichnet, aber egal. m ist die Bezeichnung für die Matrix, verstehe ich das richtig?
Noch eine Nachfrage an Sirius3, da ich Numpy nicht kenne: Was macht Numpy und wo bekomme ich das, mir scheint das so allerdings etwas getrickst?
Guten Morgen Python24.
Alternativ könntest du es auch so schreiben:
Zu dem 'Wo': Das hängt ein bisschen davon ab, auf welchem Betriebssystem du unterwegs bist? Windows, Linux, Mac? Bei Linux findet man es oft in den Distributionspaketen, bei Windows wird es dann allerdings etwas komplizierter. Falls Letzteres zutrifft schau dir das mal Anaconda an: https://www.continuum.io/
Schöne Grüße
Einfach ausgedrückt liefert dir die Built-In Funktion enumerate zusätzlich zum dem Wert der Sequenz einen Zähler über diese mit zurück. Somit brauchst du nicht extra eine Zählvariable führen, die dir sagt an welcher Stelle du dich gerade in der Sequenz befindest....wenn mir nun noch jemand den Zweck von "enumerate" genauer erklären könnte
Code: Alles auswählen
for i, value in enumerate([11, 22, 33]):
print('Index: {0}, Wert: {1}'.format(i, value))
Code: Alles auswählen
i = 0
for value in [11, 22, 33]:
print('Index: {0}, Wert: {1}'.format(i, value))
i += 1
Zu dem 'Was' siehe Wikipedia: https://de.wikipedia.org/wiki/NumPyWas macht Numpy und wo bekomme ich das
Zu dem 'Wo': Das hängt ein bisschen davon ab, auf welchem Betriebssystem du unterwegs bist? Windows, Linux, Mac? Bei Linux findet man es oft in den Distributionspaketen, bei Windows wird es dann allerdings etwas komplizierter. Falls Letzteres zutrifft schau dir das mal Anaconda an: https://www.continuum.io/
Schöne Grüße
In der Antwort wird nur über i gegangen weil bei der Hauptdiagonalen die Zeilennummer identisch mit der Spaltennummer ist. Also:Python24 hat geschrieben: [...] was mir auch unklar ist, ist die erste Antwort allgemein, da dort in der Schleife zweimal über i gegangen wird, was wohl die Zeilen sind.
Wie gesagt ich habe es zur Vereinfachung mit z für Zeile bezeichnet, aber egal. m ist die Bezeichnung für die Matrix, verstehe ich das richtig?
1. Punkt: Zeile = 0, Spalte = 0
2. Punkt: Zeile = 1, Spalte = 1
3. Punkt: Zeile = 2, Spalte = 2
usw.
Und ja, m ist die Matrix.