Menu
Coddy logo textTech

Opérations matricielles courantes

Fait partie de la section Logique & Flux du Journey C# de Coddy — leçon 6 sur 66.

Les matrices sont couramment utilisées en mathématiques et en informatique. Explorons quelques opérations courantes sur les tableaux 2D.

Additionner deux matrices :

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;
}

Transposer une matrice (échanger les lignes et les colonnes) :

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;
}

Calculez la somme de chaque ligne :

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;
}

Multiplier deux matrices ensemble :


Dans la multiplication de matrices, chaque élément result[i][j] est calculé comme le produit scalaire de la ligne i de la première matrice et de la colonne j de la seconde matrice — c'est-à-dire, la somme de matrix1[i][k] * matrix2[k][j] pour chaque k. La première matrice doit avoir autant de colonnes que la seconde matrice a de lignes.

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

Défi

Difficile

Créez une méthode appelée multiplyMatrices qui :

  1. Prend deux matrices (tableaux 2D dentelés) en paramètres : matrix1 et matrix2
  2. Les multiplie en suivant les règles de la multiplication de matrices
  3. Retourne la matrice résultante

Pour que la multiplication de matrices soit valide :

  • Le nombre de colonnes dans matrix1 doit être égal au nombre de lignes dans matrix2
  • Le résultat aura les dimensions : [matrix1.rows × matrix2.columns]

Comment fonctionne la multiplication de matrices :
Chaque élément à la position [i][j] dans le résultat est calculé en prenant la ligne i de matrix1 et la colonne j de matrix2, en multipliant leurs éléments correspondants ensemble, et en sommant tous ces produits :

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

En d'autres termes : result[i][j] = sum of (matrix1[i][k] * matrix2[k][j]) pour chaque k.

Par exemple, si matrix1 est :

[1, 2]
[3, 4]

Et matrix2 est :

[5, 6]
[7, 8]

Alors result[0][0] = 1*5 + 2*7 = 19, result[0][1] = 1*6 + 2*8 = 22, et ainsi de suite. Le résultat devrait être :

[19, 22]
[43, 50]

Si les matrices ne peuvent pas être multipliées, retournez null.

Aide-mémoire

Opérations matricielles courantes utilisant des tableaux en dents de scie 2D :

Ajouter deux matrices :

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;
}

Transposer une matrice (échanger lignes et colonnes) :

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;
}

Calculer la somme de chaque ligne :

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;
}

Multiplier deux matrices :
Chaque élément result[i][j] est la somme des produits de la ligne i de la première matrice et de la colonne j de la seconde matrice :
result[i][j] += matrix1[i][k] * matrix2[k][j] pour chaque k.
La première matrice doit avoir autant de colonnes que la seconde matrice n'a de lignes.

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++)
        {
            for (int k = 0; k < inner; k++)
            {
                result[i][j] += a[i][k] * b[k][j];
            }
        }
    }
    return result;
}

Essayez vous-même

public class MultiplyMatrices
{
    // Implémentez la méthode MultiplyMatrices
    public static int[][] multiplyMatrices(int[][] matrix1, int[][] matrix2)
    {
        // Écrivez votre code ici
        
    }
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique & Flux