Menu
Coddy logo textTech

Common Matrix Operations

Coddy'nin C# Journey'sinin Mantık & Akış bölümünün bir parçası — ders 6 / 66.

Matrisler matematik ve bilgisayar bilimlerinde yaygın olarak kullanılır. 2D diziler üzerindeki bazı yaygın işlemleri inceleyelim.

İki matrisi birbiriyle toplayın:

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

Bir matrisin transpozunu al (satır ve sütunları yer değiştir):

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

Her satırın toplamını hesaplayın:

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

İki matrisi birbiriyle çarpın:

Matris çarpımında, her bir result[i][j] elemanı, birinci matristen i satırı ve ikinci matristen j sütunu alınarak, bunların karşılık gelen elemanlarının çarpılması ve çarpımların toplanmasıyla hesaplanır. Biçimsel olarak: Tüm geçerli k değerleri için result[i][j] = sum of matrix1[i][k] * matrix2[k][j].
Bunun çalışması için, matrix1 içindeki sütun sayısının matrix2 içindeki satır sayısına eşit olması gerekir. Sonuç matrisi [matrix1.rows × matrix2.cols] boyutlarına sahiptir.

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

Görev

Zor

multiplyMatrices adında bir metot oluşturun; bu metot:

  1. Parametre olarak iki matris (2D düzensiz diziler) alır: matrix1 ve matrix2
  2. Matris çarpımı kurallarını izleyerek bunları çarpar
  3. Sonuç matrisini döndürür

Matris çarpımının geçerli olması için:

  • matrix1'deki sütun sayısı, matrix2'deki satır sayısına eşit olmalıdır
  • Sonuç şu boyutlara sahip olacaktır: [matrix1.rows × matrix2.columns]

Matris çarpımı nasıl çalışır:
Sonuçtaki [i][j] konumundaki her bir eleman, matrix1'den i satırı ve matrix2'den j sütunu alınarak, bunlara karşılık gelen elemanların birbiriyle çarpılması ve tüm bu çarpımların toplanmasıyla hesaplanır:

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

Başka bir deyişle: her bir k için result[i][j] = sum of (matrix1[i][k] * matrix2[k][j]).

Örneğin, matrix1 şu şekildeyse:

[1, 2]
[3, 4]

Ve matrix2 şu şekildeyse:

[5, 6]
[7, 8]

O zaman result[0][0] = 1*5 + 2*7 = 19, result[0][1] = 1*6 + 2*8 = 22 ve bu şekilde devam eder. Sonuç şu olmalıdır:

[19, 22]
[43, 50]

Eğer matrisler çarpılamıyorsa, null döndürün.

Kendin dene

public class MultiplyMatrices
{
    // MultiplyMatrices metodunu uygulayın
    public static int[][] multiplyMatrices(int[][] matrix1, int[][] matrix2)
    {
        // Kodunuzu buraya yazın
        
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık & Akış bölümündeki tüm dersler