Numpy продукт или тензорный продукт вопрос - PullRequest
3 голосов
/ 16 сентября 2011

Как я могу рассчитать этот продукт без цикла? Я думаю, что мне нужно использовать 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 ]

3 голосов
/ 16 сентября 2011

Я потерял сюжет. Ответ просто

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)
0 голосов
/ 16 сентября 2011

Может ли это помочь вам с синтаксисом?

>>> 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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...