У математиці я думаю, що крапка в нуме має більше сенсу
крапка (a, b) _ {i, j, k, a, b, c} =
оскільки він дає крапковий добуток, коли a і b є векторами, або множення матриці, коли a і b є матрицями
Що стосується операції matmul у numpy, вона складається з частин точкового результату, і її можна визначити як
> matmul (a, b) _ {i, j, k, c} =
Отже, ви можете бачити, що matmul (a, b) повертає масив невеликої форми, який має менший обсяг пам’яті та має більше сенсу в додатках. Зокрема, поєднуючись із мовленням , можна отримати
matmul (a, b) _ {i, j, k, l} =
наприклад.
З наведених вище визначень видно вимоги щодо використання цих двох операцій. Припустимо, а.шапе = (s1, s2, s3, s4) і b.shape = (t1, t2, t3, t4)
Для використання точки (a, b) вам потрібно
- t3 = s4 ;
Для використання matmul (a, b) вам потрібно
- t3 = s4
- t2 = s2 , або один з t2 і s2 дорівнює 1
- t1 = s1 , або один з t1 і s1 дорівнює 1
Використовуйте наступний фрагмент коду, щоб переконати себе.
Зразок коду
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