Yaygın Matris İşlemleri
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, result[i][j] öğesi, ilk matristen i. satır ve ikinci matristen j. sütun alınarak, karşılık gelen öğelerinin ç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ı, matrix2 içindeki satır sayısına eşit olmalıdır. Ortaya çıkan matrisin boyutları [matrix1.rows × matrix2.cols] olur.
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
ZorŞu adımları gerçekleştiren multiplyMatrices adlı bir yöntem oluştur:
- Parametre olarak iki matris (2B düzensiz dizi) alır: matrix1 ve matrix2
- Bunları matris çarpımı kurallarına göre çarpar
- Ortaya çıkan matrisi döndürür
Matris çarpımının geçerli olması için:
- matrix1 içindeki sütun sayısı, matrix2 içindeki satır sayısına eşit olmalıdır
- Sonuç şu boyutlara sahip olur: [matrix1.rows × matrix2.columns]
Matris çarpımı nasıl çalışır:
Sonuçtaki [i][j] konumundaki her öğe, matrix1 içindeki i. satır ile matrix2 içindeki j. sütun alınarak, karşılık gelen öğelerin 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 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]Bu durumda result[0][0] = 1*5 + 2*7 = 19, result[0][1] = 1*6 + 2*8 = 22 olur ve bu şekilde devam eder. Sonuç şu şekilde olmalıdır:
[19, 22]
[43, 50]Matrisler çarpılamıyorsa null döndür.
Kendin dene
public class MultiplyMatrices
{
// MultiplyMatrices metodunu uygulayın
public static int[][] multiplyMatrices(int[][] matrix1, int[][] matrix2)
{
// Kodunuzu 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
1Çok Boyutlu Diziler
2B Dizilere Giriş2B Tanımlama ve Başlatma2B Dizi Öğelerine Erişim2B Dizilerle İç İçe DöngülerDüzensiz DizilerYaygın Matris İşlemleriTekrar - Çok Boyutlu4Akış Denetimi Teknikleri
Erken DönüşlerKoruma KoşullarıAtlama İfadeleri (goto)Break ve Continueİç İçe Koşulları Düzleştirme7İleri Düzey Mantıksal Operatörler
Kısa Devre DeğerlendirmesiKoşullu Mantıksal OperatörlerOperatör ÖnceliğiÖzet - İleri Düzey Operatörler2İleri Düzey Karar Verme
Birden Çok KoşulKarmaşık Boolean MantığıIf ve Switch Karşılaştırmasıİç İçe Switch İfadeleriÖzet - İleri Düzey Kararlar5İstisna Yönetimi
Try-Catch Temelleriİstisna TürleriBirden Çok Catch BloğuDosyalarla ÇalışmaFinally BloğuUsing ve Try-Finally KarşılaştırmasıÖzel İstisnalarTekrar - Hata Yönetimi3Döngü İyileştirmeleri
Döngü PerformansıKarmaşık Yapılar Üzerinde İterasyonHer Döngü TürüDöngüleri Yeniden DüzenlemeÖzet - Optimize Edilmiş Döngüler6Null Yönetimi
Null Referanslarının TemelleriNullable Değer TürleriNull Kontrolü DesenleriSavunmacı ProgramlamaTekrar - Null GüvenliğiKendi başına pratik yap: Online C# derleyicisi