numpy中的特定张量积

时间:2017-07-14 19:50:33

标签: python numpy matrix tensor

我想在矩阵上计算以下操作:

import numpy as np

x = np.arange(9).reshape((3,3))
result = np.zeros((3,3,3))
for i in range(3):
    for j in range(3):
        for k in range(3):
            result[i,j,k] = x[j,i] * x[j,k]

哪个给出了

array([[[  0.,   0.,   0.],
        [  9.,  12.,  15.],
        [ 36.,  42.,  48.]],

       [[  0.,   1.,   2.],
        [ 12.,  16.,  20.],
        [ 42.,  49.,  56.]],

       [[  0.,   2.,   4.],
        [ 15.,  20.,  25.],
        [ 48.,  56.,  64.]]])

正如所料。

问题

如何使用numpy?(/ p>)使用张量积(无循环)执行此计算

修改

如果X的元素是向量,则操作是:

result[i,j,k] = np.dot(x[j,i] , x[j,k])

这个计算的适当numpy运算符是什么?

1 个答案:

答案 0 :(得分:2)

使用迭代器作为np.einsum的字符串表达式的直接将是 -

np.einsum('ji,jk->ijk',x,x)

另一个broadcasting和交换轴 -

(x[:,None,:]*x[:,:,None]).swapaxes(0,1)