Garfield
YZF Admin
NumPy’de
Boyuta göre
Bu tabloya göre
İki vektör aynı uzunluktaysa
Hesaplama
İki matris için
Çıktı şöyledir:
Örneğin sol üstteki
Bir iki boyutlu matris ile tek boyutlu vektör kullanıldığında her satır vektörle çarpılır ve toplanır:
Çıktı
Çıktı mantıksal olarak şöyledir:
İlk satır eleman bazında çarpımdır. İkinci satır ise bu üç çarpımın toplamıdır. Yalnızca karşılıklı elemanları çarpmak istiyorsanız
Matris işlemlerinde dizilerin yalnızca eleman sayısı değil, şekli de önemlidir.
İki boyutlu
İki matrisin veya matris ile vektörün çarpımını açıkça belirtmek istiyorsanız
Bu kullanım matris çarpımı niyetini doğrudan gösterir.
Kısaca: iç çarpım için iki tek boyutlu dizide, matris çarpımı için iki boyutlu dizide, matris-vektör işlemi için uygun şekilli matris ve vektörde
dot() kullanımı, dizilerin boyutuna göre değişir: iki skalerde normal çarpma, iki tek boyutlu dizide iç çarpım, iki iki boyutlu dizide matris çarpımı yapılır. Girdilerden biri skaler olduğunda işlem eleman bazında çarpmaya karşılık gelir. Birinci dizi çok boyutlu, ikinci dizi tek boyutluysa her ikisinin son ekseni üzerinden çarpımlar toplanır. İkinci dizi en az iki boyutlu olduğunda ise birinci dizinin son ekseni ile ikinci dizinin sondan bir önceki ekseni birleştirilir. Bu nedenle np.dot() kullanmadan önce dizilerin boyutlarını kontrol etmek gerekir; özellikle matris işlemlerinde np.matmul() veya @ daha açık bir tercih olabilir.Boyuta göre np.dot() davranışı
np.dot(a, b) ifadesi, a ve b dizilerinin boyutlarına göre farklı bir matematiksel işlem yapar:| Girdi boyutları | Yapılan işlem | Sonuç |
|---|---|---|
| 0 boyutlu + 0 boyutlu | Skaler çarpma | Tek bir sayı |
| 1 boyutlu + 1 boyutlu | İç çarpım veya noktasal çarpım | Tek bir sayı |
| 2 boyutlu + 1 boyutlu | Matris ile vektör çarpımı | 1 boyutlu dizi |
| 2 boyutlu + 2 boyutlu | Matris çarpımı | 2 boyutlu dizi |
| Çok boyutlu diziler | Belirli eksenler boyunca çarpımların toplamı | Kalan eksenlere göre dizi |
dot(), yalnızca “elemanları karşılıklı çarpıp aynı biçimde bırakma” işlemi değildir. Sonuçta hangi eksenlerin toplandığı, dizilerin boyutlarına bağlıdır.Tek boyutlu dizilerde iç çarpım
İki vektör aynı uzunluktaysa
dot() karşılıklı elemanları çarpar ve bu çarpımları toplar. Örneğin:
Python:
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
sonuc = np.dot(a, b)
print(sonuc)
Hesaplama
1×4 + 2×5 + 3×6 şeklindedir ve çıktı 32 olur. Bu sonuç, vektörlerin iç çarpımıdır; iki vektörü yan yana birleştiren veya eleman bazında yeni bir dizi üreten işlem değildir.İki boyutlu dizilerde matris çarpımı
İki matris için
dot(), satır-sütun kuralına göre matris çarpımı yapar:
Python:
import numpy as np
A = np.array([[1, 2],
[3, 4]])
B = np.array([[5, 6],
[7, 8]])
C = np.dot(A, B)
print(C)
Çıktı şöyledir:
Kod:
[[19 22]
[43 50]]
Örneğin sol üstteki
19 değeri, 1×5 + 2×7 hesabından gelir. Sonuç matrisinin şekli, ilk matrisin satır sayısı ile ikinci matrisin sütun sayısına göre oluşur.Matris-vektör çarpımı
Bir iki boyutlu matris ile tek boyutlu vektör kullanıldığında her satır vektörle çarpılır ve toplanır:
Python:
import numpy as np
A = np.array([[1, 2],
[3, 4]])
x = np.array([10, 20])
sonuc = np.dot(A, x)
print(sonuc)
Çıktı
[50 110] olur. Çünkü ilk satır için 1×10 + 2×20 = 50, ikinci satır için 3×10 + 4×20 = 110 hesaplanır. Bu kullanım, doğrusal cebirde matrisin bir vektöre uygulanmasını ifade eder.Eleman bazında çarpma ile karıştırmayın
np.dot() ile * aynı işlem değildir. Aynı şekle sahip dizilerde * her konumdaki elemanı karşılıklı çarpar; dot() ise boyuta bağlı olarak çarpımları toplayabilir veya matris çarpımı yapabilir.
Python:
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(a * b)
print(np.dot(a, b))
Çıktı mantıksal olarak şöyledir:
Kod:
[ 4 10 18]
32
İlk satır eleman bazında çarpımdır. İkinci satır ise bu üç çarpımın toplamıdır. Yalnızca karşılıklı elemanları çarpmak istiyorsanız
* kullanın; iç çarpım veya matris çarpımı istiyorsanız dot() kullanın.Şekil uyumluluğunu kontrol etme
Matris işlemlerinde dizilerin yalnızca eleman sayısı değil, şekli de önemlidir.
shape özelliğiyle bunu çalıştırmadan önce kontrol edebilirsiniz:
Python:
print(A.shape)
print(B.shape)
İki boyutlu
A ve B için A.shape[1] ile B.shape[0] değerleri eşleşmelidir. Örneğin (2, 3) şekilli bir matris, (3, 4) şekilli bir matrisle çarpılabilir ve sonuç (2, 4) olur. İç boyutlar eşleşmiyorsa işlem, boyut uyumsuzluğu hatasıyla sonuçlanır.dot() yerine ne zaman @ kullanılır?
İki matrisin veya matris ile vektörün çarpımını açıkça belirtmek istiyorsanız
@ operatörü daha okunaklıdır:
Python:
matris_sonucu = A @ B
vektor_sonucu = A @ x
Bu kullanım matris çarpımı niyetini doğrudan gösterir.
np.dot() ise skaler, vektör, matris ve çok boyutlu dizi girişlerinde boyuta göre davranabildiği için genel amaçlıdır. Özellikle çok boyutlu dizilerde hangi eksenlerin birleştirildiğini açıkça düşünmeden kullanmak beklenmeyen sonuçlara yol açabilir.Kısaca: iç çarpım için iki tek boyutlu dizide, matris çarpımı için iki boyutlu dizide, matris-vektör işlemi için uygun şekilli matris ve vektörde
np.dot() kullanabilirsiniz. Eleman bazında çarpım gerekiyorsa * operatörünü, açık matris çarpımı gerekiyorsa @ operatörünü tercih edin.