Тенсордот 2-х векторных полей - PullRequest
0 голосов
/ 11 июля 2020

Я хочу вычислить поэлементное тензорное произведение двух тензоров формы. (1144,3) означает, что я хочу вычислить тензорное значение вдоль второй оси, если я правильно понял.

Я ожидал бы, что мой результат должен иметь форму (1144,3,3).

В настоящее время я пытаюсь добиться этого с помощью функции numpys tensordot(), но я не могу определить правильные оси для использования форма (1144,3,3).

1 Ответ

1 голос
/ 11 июля 2020

Вы можете использовать numpy .einsum для этого.

In [30]: a
Out[30]:
array([[0, 1, 2],
       [3, 4, 5]])

In [31]: np.einsum('ij,ik->ijk', a, a)
Out[31]:
array([[[ 0,  0,  0],
    [ 0,  1,  2],
    [ 0,  2,  4]],

       [[ 9, 12, 15],
    [12, 16, 20],
    [15, 20, 25]]])

Поскольку numpy.tensordot поддерживает только 2 элемента axes, это означает, что нет возможности имитировать

->... -подобное поведение. Поэтому я не понимаю, как это можно сделать с помощью numpy.tensordot.

...