В математике я думаю, что точка в numpy имеет больше смысла
точка (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} =
например.
Из двух приведенных выше определений вы можете увидеть требования для использования этих двух операций. Предположим, что a.shape = (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