Spur einer Matrix berechnen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Python24
User
Beiträge: 20
Registriert: Mittwoch 14. Oktober 2015, 21:35

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...
Benutzeravatar
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.
Sirius3
User
Beiträge: 17745
Registriert: Sonntag 21. Oktober 2012, 17:20

Mit numpy:

Code: Alles auswählen

numpy.array([[1, 2], [3, 4]]).trace()
@pillmuncher: wenn Du schon eine Schleife über die Zeilen hast, warum nutzt Du sie dann nicht?

Code: Alles auswählen

sum(row[i] for i, row in enumerate(m))
Python24
User
Beiträge: 20
Registriert: Mittwoch 14. Oktober 2015, 21:35

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?
Benutzeravatar
__LC__
User
Beiträge: 32
Registriert: Dienstag 1. März 2011, 14:08
Wohnort: 127.0.0.1
Kontaktdaten:

Guten Morgen Python24.
...wenn mir nun noch jemand den Zweck von "enumerate" genauer erklären könnte
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.

Code: Alles auswählen

    for i, value in enumerate([11, 22, 33]):
        print('Index: {0}, Wert: {1}'.format(i, value))
Alternativ könntest du es auch so schreiben:

Code: Alles auswählen

    i = 0
    for value in [11, 22, 33]:
        print('Index: {0}, Wert: {1}'.format(i, value))
        i += 1
Was macht Numpy und wo bekomme ich das
Zu dem 'Was' siehe Wikipedia: https://de.wikipedia.org/wiki/NumPy
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
Zizibee
User
Beiträge: 229
Registriert: Donnerstag 12. April 2007, 08:36

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?
In der Antwort wird nur über i gegangen weil bei der Hauptdiagonalen die Zeilennummer identisch mit der Spaltennummer ist. Also:
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.
Antworten