Menu
Coddy logo textTech

Häufige Matrixoperationen

Teil des Abschnitts Logik & Ablauf der C#-Journey von Coddy. Lektion 6 von 66.

Matrizen werden häufig in der Mathematik und Informatik verwendet. Lassen Sie uns einige gängige Operationen auf 2D-Arrays untersuchen.

Zwei Matrizen addieren:

int[][] AddMatrices(int[][] a, int[][] b)
{
    int rows = a.Length;
    int[][] result = new int[rows][];
    
    for (int i = 0; i < rows; i++)
    {
        result[i] = new int[a[i].Length];
        for (int j = 0; j < a[i].Length; j++)
        {
            result[i][j] = a[i][j] + b[i][j];
        }
    }
    return result;
}

Transponiere eine Matrix (Zeilen und Spalten vertauschen):

int[][] Transpose(int[][] matrix)
{
    int rows = matrix.Length;
    int cols = matrix[0].Length;
    
    int[][] result = new int[cols][];
    for (int i = 0; i < cols; i++)
    {
        result[i] = new int[rows];
        for (int j = 0; j < rows; j++)
        {
            result[i][j] = matrix[j][i];
        }
    }
    return result;
}

Berechnen Sie die Summe jeder Zeile:

int[] RowSums(int[][] matrix)
{
    int rows = matrix.Length;
    int[] sums = new int[rows];
    
    for (int i = 0; i < rows; i++)
    {
        int sum = 0;
        for (int j = 0; j < matrix[i].Length; j++)
        {
            sum += matrix[i][j];
        }
        sums[i] = sum;
    }
    return sums;
}

Zwei Matrizen miteinander multiplizieren:

Bei der Matrixmultiplikation wird jedes Element result[i][j] berechnet, indem die Zeile i aus der ersten Matrix und die Spalte j aus der zweiten Matrix genommen, ihre entsprechenden Elemente multipliziert und die Produkte summiert werden. Formal: result[i][j] = sum of matrix1[i][k] * matrix2[k][j] für alle gültigen Werte von k.
Damit dies funktioniert, muss die Anzahl der Spalten in matrix1 der Anzahl der Zeilen in matrix2 entsprechen. Die resultierende Matrix hat die Dimensionen [matrix1.rows × matrix2.cols].

int[][] MultiplyMatrices(int[][] a, int[][] b)
{
    int rows = a.Length;
    int cols = b[0].Length;
    int inner = b.Length;
    
    int[][] result = new int[rows][];
    for (int i = 0; i < rows; i++)
    {
        result[i] = new int[cols];
        for (int j = 0; j < cols; j++)
        {
            int sum = 0;
            for (int k = 0; k < inner; k++)
            {
                sum += a[i][k] * b[k][j];
            }
            result[i][j] = sum;
        }
    }
    return result;
}
challenge icon

Aufgabe

Schwer

Erstelle eine Methode namens multiplyMatrices, die:

  1. Zwei Matrizen (zweidimensionale, unregelmäßige Arrays) als Parameter entgegennimmt: matrix1 und matrix2
  2. Sie nach den Regeln der Matrixmultiplikation multipliziert
  3. Die resultierende Matrix zurückgibt

Damit die Matrixmultiplikation gültig ist:

  • Die Anzahl der Spalten in matrix1 muss der Anzahl der Zeilen in matrix2 entsprechen
  • Das Ergebnis hat die Dimensionen: [matrix1.rows × matrix2.columns]

So funktioniert die Matrixmultiplikation:
Jedes Element an der Position [i][j] im Ergebnis wird berechnet, indem die Zeile i aus matrix1 und die Spalte j aus matrix2 genommen, ihre entsprechenden Elemente miteinander multipliziert und alle diese Produkte summiert werden:

result[i][j] = matrix1[i][0] * matrix2[0][j] + matrix1[i][1] * matrix2[1][j] + ...

Mit anderen Worten: result[i][j] = sum of (matrix1[i][k] * matrix2[k][j]) für jedes k.

Wenn matrix1 beispielsweise wie folgt aussieht:

[1, 2]
[3, 4]

Und matrix2 wie folgt aussieht:

[5, 6]
[7, 8]

Dann gilt result[0][0] = 1*5 + 2*7 = 19, result[0][1] = 1*6 + 2*8 = 22 und so weiter. Das Ergebnis sollte wie folgt aussehen:

[19, 22]
[43, 50]

Wenn die Matrizen nicht miteinander multipliziert werden können, gib null zurück.

Probier es selbst

public class MultiplyMatrices
{
    // Implementiere die MultiplyMatrices-Methode
    public static int[][] multiplyMatrices(int[][] matrix1, int[][] matrix2)
    {
        // Schreibe hier deinen Code
        
    }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf

Übe selbstständig: Online-C#-Compiler