Matrix-Rechnung#

Typische Aufgaben für Runde 2, denn wir haben es mit verschachtelten Listen zu tun.

Aufgabe: Normalisierung der Zeilen einer Matrix (R1)#

Mit den eingebauten Datenstrukturen von Python kann man eine Matrix als eine Liste von gleichlangen Listen darstellen.

Matrix_2mal3 = [  # 2 Zeilen, 3 Spalten
    [ 11, 12, 13 ],
    [ 21, 22, 23 ]
]

Gegeben:

  • Eine 2 mal 3-Matrix

    • z.B. Matrix_2mal3

Gesucht:

  • Liste der Zeilensummen

  • Liste der Spaltensummen

(In einer Matrix sind alle Zeilen gleich lang.)

def zeilensummen(Matrix):

    Ergebnis = []

    for zeile in Matrix:

        summe = 0
        for zahl in zeile:
            summe += zahl
        Ergebnis.append(summe)
        
    return Ergebnis

zeilensummen(Matrix_2mal3)
[36, 66]
def spaltensummen(Matrix):
    
    Ergebnis = []
    
    for i in range( len(Matrix[0]) ): 
        
        Summe = 0
        for zeile in Matrix:
            Summe += zeile[i]
        Ergebnis.append(Summe)
        
    return Ergebnis

spaltensummen(Matrix_2mal3)
[32, 34, 36]

Aufgabe: Matrix mal Vektor (R2)#

Um eine Matrix mit einem Vektor zu multiplizieren, muss – in der Sprache der Mathematik – die Spaltenanzahl der Matrix mit der Zeilenanzahl des Vektors übereinstimmen.

z.B. 2x3 - Matrix aus https://simpleclub.com/lessons/mathematik-matrixvektormultiplikation

# Werte siehe
# https://simpleclub.com/lessons/mathematik-matrixvektormultiplikation
# 2x3 - Matrix
B = [  # 2 Zeilen, 3 Spalten
    [ 1, 3, -1 ],
    [ 5, 2, 1  ]]

In der Sprache der Mathematik ist v ein Spalten-Vektor, den man in unserem Beispiel korrekterweise so notieren müsste:

v_spaltenvektor = [ [1], [-1], [2] ]  # Spaltenvektor als 3 mal 1-Matrix

Diese mathematisch eingentlich korrekte Notation als Spaltenvektor ist etwa praxisfern. Wir notieren unseren Vektor einfacher (aber mathematisch nicht ganz korrekt) wie oben als (Zeilen-) Vektor:

v = [ 1, -1, 2 ]

Gegeben:

  • eine n mal m-Matrix, alse eine Liste von Listen zeilenweise notiert

    • z.B. obige Matrix B

  • ein Vektor mit m Spalten (sic!)

    • z.B. obigen Vektor v

Gesucht:

  • Eine Funktion matrix_mal_vektor(m, v), die die Matrix m mit dem Vektor v multipliziert.

def matrix_mal_vektor(Matrix, Vektor):
    
    #print(f"{B=}")
    #print(f"{v=}")
    
    Ergebnis = []
    
    n = len(Matrix) # Anzahl der Zeilen in der Matrix
    m = len(v)
    
    for zeile in Matrix:
        ... # 
        ... # 
            ... # 
        ... # 
        ... # 
        
    return Ergebnis      
  Cell In [7], line 14
    ... #
    ^
IndentationError: unexpected indent
matrix_mal_vektor(B,v)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In [8], line 1
----> 1 matrix_mal_vektor(B,v)

NameError: name 'matrix_mal_vektor' is not defined