LINUX.ORG.RU

Помогите разобраться с tensordot

 , ,


0

1

Доброго времени суток! Помогите разобраться с tensordot из numpy. Вот есть у меня два массива А размерами (2х3х4) и В размерами (2х5).

c=numpy.tensordot(A,B,[0,0])
В результате получается тензор размерами (3х4х5). Как видно алгоритм упаковывает матричные произведения
 A[:,:,i].transpose() * В 
вдоль оси Оу.Умножаются матрицы размерностью (3х2)*(2х5) Во первых, как именно выбирается первый аргумент этого произведения? А точнее другая ось (одну я указал в аргументах tensordot)? Почему не (4х2)*(2х5) например?
А во-вторых почему не (3х5х4)? Как выбирается ось, вдоль которой будут располагаться произведения отдельных двумерных матриц? Есть ли вообще какое-нибудь формальное описание того, что делает tensordot в python?

★★★

Последнее исправление: LIKAN (всего исправлений: 1)

Ответ на: комментарий от LIKAN

Где вы там увидели формальное, алгоритмическое описание?!

В первой строке там написано, что делает эта ф-ия:«Compute tensor dot product». Т.е. вычисляет скалярное произведение двух тензоров. Дальше можно гуглить.

Ну и во вторых там в секции exmaples приведён код, который показывает эквивалент того, что собственно происходит внутри tensordot:

>>> a = np.arange(60.).reshape(3,4,5)
>>> b = np.arange(24.).reshape(4,3,2)
>>> # A slower but equivalent way of computing the same...
>>> d = np.zeros((5,2))
>>> for i in range(5):
...   for j in range(2):
...     for k in range(3):
...       for n in range(4):
...         d[i,j] += a[k,n,i] * b[n,k,j]
hope13 ★★★
()
Ответ на: комментарий от hope13

Да видел видел. Это вообще описано в виде комментариев в самом коде tensordot. Но считать ЭТО формальным описанием алгоритма - это конечно сильно. В общем случае в скалярном произведении тензоров никакие размерности не складываются. А мой вопрос посвящен именно правилам сложения размерностей.

LIKAN ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.