И NumPy товара или тензора вопрос о товаре
Как я могу вычислить это произведение без цикла? Я думаю, что мне нужно использовать numpy.tensordot
но я, кажется, не могу установить его правильно. Вот версия цикла:
import numpy as np
a = np.random.rand(5,5,3,3)
b = np.random.rand(5,5,3,3)
c = np.zeros(a.shape[:2])
for i in range(c.shape[0]):
for j in range(c.shape[1]):
c[i,j] = np.sum(a[i,j,:,:] * b[i,j,:,:])
(результатом является массив numpy c
формы (5,5)
)
2 ответа:
Я потерял сюжет. Ответ прост
c = a * b c = np.sum(c,axis=3) c = np.sum(c,axis=2)
Или на одной строке
c = np.sum(np.sum(a*b,axis=2),axis=2)
Может ли это помочь вам с синтаксисом ?
>>> from numpy import * >>> a = arange(60.).reshape(3,4,5) >>> b = arange(24.).reshape(4,3,2) >>> c = tensordot(a,b, axes=([1,0],[0,1])) # sum over the 1st and 2nd dimensions >>> c.shape (5,2) >>> # A slower but equivalent way of computing the same: >>> c = zeros((5,2)) >>> for i in range(5): ... for j in range(2): ... for k in range(3): ... for n in range(4): ... c[i,j] += a[k,n,i] * b[n,k,j] ...
(от http://www.scipy.org/Numpy_Example_List#head-a46c9c520bd7a7b43e0ff166c01b57ec76eb96c7 )