İki Matrisi Çarpmak İçin Python Programı

İçindekiler

Bu örnekte, matrisleri iki farklı yol kullanarak çarpmayı öğreneceğiz: iç içe döngü ve iç içe liste karşılaştırması

Bu örneği anlamak için, aşağıdaki Python programlama konuları hakkında bilgi sahibi olmalısınız:

  • Döngü için Python
  • Python Listesi
  • Python Matrisleri ve NumPy Dizileri

Python'da, bir matrisi iç içe liste olarak uygulayabiliriz (liste içindeki liste).

Her bir öğeyi matrisin bir satırı olarak ele alabiliriz.

Örneğin X = ((1, 2), (4, 5), (3, 6))bir 3x2matrisi temsil eder .

İlk sıra olarak seçilebilir X(0). Ve ilk satırdaki eleman, ilk sütun olarak seçilebilir X(0)(0).

X ve Y matrislerinin çarpımı yalnızca X'teki sütunların sayısı Y satırlarının sayısına eşitse tanımlanır.

X bir n x mmatrisse ve Y bir m x lmatrisse, XY tanımlanır ve boyuta sahiptir n x l(ancak YX tanımlı değildir). İşte Python'da matris çarpımını uygulamanın birkaç yolu.

Kaynak Kodu: İç İçe Döngü kullanarak Matris Çarpma

# Program to multiply two matrices using nested loops # 3x3 matrix X = ((12,7,3), (4 ,5,6), (7 ,8,9)) # 3x4 matrix Y = ((5,8,1,2), (6,7,3,0), (4,5,9,1)) # result is 3x4 result = ((0,0,0,0), (0,0,0,0), (0,0,0,0)) # iterate through rows of X for i in range(len(X)): # iterate through columns of Y for j in range(len(Y(0))): # iterate through rows of Y for k in range(len(Y)): result(i)(j) += X(i)(k) * Y(k)(j) for r in result: print(r) 

Çıktı

 (114, 160, 60, 27) (74, 97, 73, 14) (119, 157, 112, 23) 

Bu programda, forher satır ve her sütunda yineleme yapmak için iç içe döngüler kullandık . Sonuçta ürünlerin toplamını biriktiriyoruz.

Bu teknik basittir ancak matrisin sırasını artırdıkça hesaplama açısından pahalıdır.

Daha büyük matris işlemleri için, yukarıdaki koddan birkaç (1000 düzeyinde) kat daha hızlı olan NumPy gibi optimize edilmiş yazılım paketlerini öneririz.

Kaynak Kodu: İç İçe Liste Anlamayı Kullanarak Matris Çarpımı

# Program to multiply two matrices using list comprehension # 3x3 matrix X = ((12,7,3), (4 ,5,6), (7 ,8,9)) # 3x4 matrix Y = ((5,8,1,2), (6,7,3,0), (4,5,9,1)) # result is 3x4 result = ((sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*Y)) for X_row in X) for r in result: print(r) 

Bu programın çıktısı yukarıdaki ile aynıdır. Yukarıdaki kodu anlamak için önce yerleşik işlevi zip()ve * operatörünü kullanarak argüman listesini açmayı bilmeliyiz .

Matristeki her bir öğeyi yinelemek için iç içe geçmiş liste anlama özelliğini kullandık. Kod ilk başta karmaşık ve okunamaz görünüyor. Ancak liste anlayışlarını öğrendikten sonra, muhtemelen iç içe döngülere geri dönmeyeceksiniz.

Ilginç makaleler...