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 biliminde yaygın olarak kullanılır. 2D diziler üzerinde bazı yaygın işlemleri keşfedelim.
İki matrisi topla:
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;
}Matrisi transpoze edin (satırları ve sütunları değiştirin):
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ı hesapla:
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;
}Iki matrisi çarpın:
Matris çarpımında, her eleman
result[i][j], birinci matrisin i satırı ile ikinci matrisin j sütununun nokta çarpımı olarak hesaplanır — yani, her k için matrix1[i][k] * matrix2[k][j] toplamıdır. Birinci matrisin sütunları, ikinci matrisin satırları kadar olmalıdır.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;
}Görev
ZormultiplyMatrices adında bir metot oluşturun ki:
- matrix1 ve matrix2 parametreleri olarak iki matris (2D kesik diziler) alsın
- matris çarpımının kurallarına göre onları çarpsın
- sonuç matrisini döndürsün
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ç boyutları: [matrix1.rows × matrix2.columns] olacaktır
Matris çarpımı nasıl çalışır:
Sonuçtaki [i][j] konumundaki her eleman, matrix1'den satır i ve matrix2'den sütun j alınarak, karşılık gelen elemanları çarpıp tüm ürünlerin toplamını alarak hesaplanır:result[i][j] = matrix1[i][0] * matrix2[0][j] + matrix1[i][1] * matrix2[1][j] + ...
Başka bir deyişle: result[i][j] = sum of (matrix1[i][k] * matrix2[k][j]) her k için.
Örneğin, matrix1 şöyle ise:
[1, 2]
[3, 4]Ve matrix2 şöyle ise:
[5, 6]
[7, 8]O zaman result[0][0] = 1*5 + 2*7 = 19, result[0][1] = 1*6 + 2*8 = 22, ve benzeri. Sonuç şöyle olmalıdır:
[19, 22]
[43, 50]Matrisler çarpılamıyorsa, null döndürün.
Kopya kağıdı
2D kesikli diziler kullanarak yaygın matris işlemleri:
İki matrisi toplama:
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 matrisi transpoze et (satırları ve sütunları 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ı hesapla:
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 çarpma:
Her eleman result[i][j], ilk matrisin i satırı ile ikinci matrisin j sütununun çarpımlarının toplamıdır:
result[i][j] += matrix1[i][k] * matrix2[k][j] her k için.
İlk matrisin sütun sayısı, ikinci matrisin satır sayısına eşit olmalıdır.
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;
}Kendin dene
public class MultiplyMatrices
{
// MultiplyMatrices metodunu uygulayın
public static int[][] multiplyMatrices(int[][] matrix1, int[][] matrix2)
{
// Kodu buraya yazın
}
}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
1Multi-dimensional Arrays
2D Arrays BasicsDeclaring and Initializing 2DAccessing 2D Array ElementsNested Loops with 2D ArraysJagged ArraysCommon Matrix OperationsRecap - Multi-dimensional4Flow Control Techniques
Early ReturnsGuard ClausesJump Statements (goto)Break and ContinueFlatten Nested Conditionals7Logical Operators Advanced
Short-Circuit EvaluationConditional Logical OperatorsOperator PrecedenceRecap - Advanced Operators2Advanced Decision Making
Multiple ConditionsComplex Boolean LogicIf vs. Switch ComparisonNested Switch StatementsRecap - Advanced Decisions5Exception Handling
Try-Catch BasicsException TypesMultiple Catch BlocksWorking with FilesFinally BlockUsing vs. Try-FinallyCustom ExceptionsRecap - Error Handling3Loop Enhancements
Loop PerformanceIterating ComplexEach Loop TypeRefactoring LoopsRecap - Optimized Loops6Null Handling
Null Reference BasicsNullable Value TypesNull Checking PatternsDefensive ProgrammingRecap - Null Safety