Dalam matematika, menurut saya titik di numpy lebih masuk akal
titik (a, b) _ {i, j, k, a, b, c} =
karena memberikan perkalian titik jika a dan b adalah vektor, atau perkalian matriks jika a dan b adalah matriks
Adapun operasi matmul dalam numpy terdiri dari bagian-bagian hasil titik , dan dapat didefinisikan sebagai
> matmul (a, b) _ {i, j, k, c} =
Jadi, Anda dapat melihat bahwa matmul (a, b) mengembalikan array dengan bentuk kecil, yang memiliki konsumsi memori lebih kecil dan lebih masuk akal dalam aplikasi. Secara khusus, menggabungkan dengan penyiaran , Anda bisa mendapatkan
matmul (a, b) _ {i, j, k, l} =
sebagai contoh.
Dari dua definisi di atas, Anda dapat melihat persyaratan untuk menggunakan kedua operasi tersebut. Asumsikan a.shape = (s1, s2, s3, s4) and b.shape = (t1, t2, t3, t4)
Untuk menggunakan titik (a, b) yang Anda butuhkan
- t3 = s4 ;
Untuk menggunakan matmul (a, b) yang Anda butuhkan
- t3 = s4
- t2 = s2 , atau salah satu dari t2 dan s2 adalah 1
- t1 = s1 , atau salah satu dari t1 dan s1 adalah 1
Gunakan potongan kode berikut untuk meyakinkan diri Anda sendiri.
Contoh kode
import numpy as np
for it in xrange(10000):
a = np.random.rand(5,6,2,4)
b = np.random.rand(6,4,3)
c = np.matmul(a,b)
d = np.dot(a,b)
#print 'c shape: ', c.shape,'d shape:', d.shape
for i in range(5):
for j in range(6):
for k in range(2):
for l in range(3):
if not c[i,j,k,l] == d[i,j,k,j,l]:
print it,i,j,k,l,c[i,j,k,l]==d[i,j,k,j,l] #you will not see them