Garfield
YZF Admin
Matris çarpımının temel kuralı
NumPy’de iki matrisin matematiksel çarpımını yapmak içinnp.matmul(A, B) veya daha kısa olarak A @ B kullanılır. İlk matrisin sütun sayısı ikinci matrisin satır sayısına eşitse işlem yapılır ve sonuçta ilk matrisin satır, ikinci matrisin sütun sayısını taşıyan yeni bir dizi elde edilir.Örneğin 2×3 boyutundaki bir matris ile 3×2 boyutundaki bir matrisi çarparsanız sonuç 2×2 boyutunda olur. En küçük çalışır örnek şöyledir:
Python:
import numpy as np
A = np.array([
[1, 2, 3],
[4, 5, 6]
])
B = np.array([
[7, 8],
[9, 10],
[11, 12]
])
sonuc = np.matmul(A, B)
print(sonuc)
Bu kodun çıktısı:
Kod:
[[ 58 64]
[139 154]]
İlk sonuç hücresi, A’nın ilk satırı ile B’nin ilk sütununun çarpılıp toplanmasıyla hesaplanır:
1×7 + 2×9 + 3×11 = 58. Aynı kural diğer hücreler için de uygulanır. Sonuç, elemanların aynı konumda çarpılması değil, satır-sütun çarpımlarının toplamıdır.Uygulanacak yöntem
Python ortamınızda NumPy kurulu değilse önce kurun. Ardından aşağıdaki sırayla ilerleyin:- NumPy’yi içe aktarın. Kod dosyanızın başına
import numpy as npsatırını ekleyin; böylece NumPy işlevlerinenpkısaltmasıyla erişebilirsiniz. - Matrisleri NumPy dizisi olarak oluşturun.
np.array([...])kullanın ve çarpım için ilk dizinin sütun sayısının ikinci dizinin satır sayısına eşit olduğundan emin olun. - Matris çarpımını çalıştırın.
sonuc = np.matmul(A, B)yazın veya aynı işlemin kısa gösterimi olansonuc = A @ Bifadesini kullanın. - Sonucu kontrol edin.
print(sonuc)ile matrisi vesonuc.shapeile boyutunu yazdırın. Yukarıdaki örnekte boyut(2, 2)olmalıdır.
matmul, @ ve eleman bazlı çarpma arasındaki fark
np.matmul(A, B) ile A @ B aynı matris çarpımını yapar. Buna karşılık A * B, uygun boyutlarda dizilerin aynı konumdaki elemanlarını çarpar; matematiksel matris çarpımının yerine geçmez.Karar vermeyi kolaylaştıran temel ayrım şöyledir:
| İfade | İşlem | Ne zaman kullanılır? |
|---|---|---|
np.matmul(A, B) | Matris çarpımı | Satır-sütun kurallarına göre çarpım gerektiğinde |
A @ B | Matris çarpımı | matmul için kısa ve okunabilir gösterim gerektiğinde |
A * B | Eleman bazlı çarpma | Aynı konumdaki değerleri ayrı ayrı çarpmak istediğinizde |
A * B kullanmak istiyorsanız dizilerin şekilleri eleman bazlı işleme, yani NumPy’nin yayınlama (broadcasting) kurallarına uygun olmalıdır. Yukarıdaki 2×3 ve 3×2 diziler bu kurallara uymadığı için A * B bir ValueError üretir; matris çarpımı ise geçerlidir. Matematiksel matris çarpımı için np.matmul veya @ kullanın.Boyut uyuşmazlığını kontrol etme
İşlemden önce şekilleri yazdırarak hatanın nedenini görebilirsiniz:
Python:
print(A.shape)
print(B.shape)
sonuc = A @ B
print(sonuc.shape)
İlk dizi
(m, n), ikinci dizi (n, p) biçimindeyse sonuç (m, p) olur. Örneğin (2, 3) ile (3, 2) çarpılabilir; fakat (2, 3) ile (2, 2) doğrudan çarpılamaz, çünkü ilk dizinin sütun sayısı olan 3 ile ikinci dizinin satır sayısı olan 2 eşit değildir. Böyle bir hata alırsanız önce shape değerlerini kontrol edin; matrisi rastgele yeniden şekillendirmek yerine verinin matematiksel düzenine uygun dönüşümü belirleyin.
Son düzenleme: