Menu
Coddy logo textTech

Common Matrix Operations

Parte da seção Lógica & Fluxo do Journey de C# da Coddy — lição 6 de 66.

Matrizes são comumente usadas em matemática e ciência da computação. Vamos explorar algumas operações comuns em arrays 2D.

Some duas matrizes:

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

Transpor uma matriz (trocar linhas e colunas):

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

Calcule a soma de cada linha:

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

Multiplique duas matrizes:


Na multiplicação de matrizes, cada elemento result[i][j] é computado como o produto escalar da linha i da primeira matriz e da coluna j da segunda matriz — ou seja, a soma de matrix1[i][k] * matrix2[k][j] para cada k. A primeira matriz deve ter tantas colunas quantas linhas a segunda matriz tem.

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

Desafio

Difícil

Crie um método chamado multiplyMatrices que:

  1. Recebe duas matrizes (arrays 2D jagged) como parâmetros: matrix1 e matrix2
  2. Multiplica-as seguindo as regras da multiplicação de matrizes
  3. Retorna a matriz resultante

Para que a multiplicação de matrizes seja válida:

  • O número de colunas em matrix1 deve ser igual ao número de linhas em matrix2
  • O resultado terá dimensões: [matrix1.rows × matrix2.columns]

Como funciona a multiplicação de matrizes:
Cada elemento na posição [i][j] no resultado é calculado pegando a linha i de matrix1 e a coluna j de matrix2, multiplicando seus elementos correspondentes e somando todos esses produtos:

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

Em outras palavras: result[i][j] = sum of (matrix1[i][k] * matrix2[k][j]) para cada k.

Por exemplo, se matrix1 for:

[1, 2]
[3, 4]

E matrix2 for:

[5, 6]
[7, 8]

Então result[0][0] = 1*5 + 2*7 = 19, result[0][1] = 1*6 + 2*8 = 22, e assim por diante. O resultado deve ser:

[19, 22]
[43, 50]

Se as matrizes não puderem ser multiplicadas, retorne null.

Folha de consulta

Operações comuns de matriz usando arrays irregulares 2D:

Somar duas matrizes:

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

Transpor uma matriz (trocar linhas e colunas):

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

Calcular a soma de cada linha:

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

Multiplicar duas matrizes:
Cada elemento result[i][j] é a soma dos produtos da linha i da primeira matriz e da coluna j da segunda matriz:
result[i][j] += matrix1[i][k] * matrix2[k][j] para cada k.
A primeira matriz deve ter tantas colunas quantas linhas a segunda matriz tem.

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

Experimente você mesmo

public class MultiplyMatrices
{
    // Implemente o método MultiplyMatrices
    public static int[][] multiplyMatrices(int[][] matrix1, int[][] matrix2)
    {
        // Escreva seu código aqui
        
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica & Fluxo