Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python numpy中获取张量积而不执行求和_Python_Numpy - Fatal编程技术网

在python numpy中获取张量积而不执行求和

在python numpy中获取张量积而不执行求和,python,numpy,Python,Numpy,我有两个张量,每个2D,有一个共同的长轴(例如20.000)和不同的短轴(例如一个9另一个10)。我想以9X10X20000张量结束,这样对于长轴上的每个位置,其他两个轴就是张量积。 明确地说,对于这里的“长”轴4,我想做: A = np.arange(8).reshape(2,4) B = np.arange(12).reshape(3,4) C = np.zeros(2,3,4) for i in range(2): for j in range(3): for k

我有两个张量,每个2D,有一个共同的长轴(例如20.000)和不同的短轴(例如一个9另一个10)。我想以9X10X20000张量结束,这样对于长轴上的每个位置,其他两个轴就是张量积。 明确地说,对于这里的“长”轴4,我想做:

A = np.arange(8).reshape(2,4)
B = np.arange(12).reshape(3,4)
C = np.zeros(2,3,4)
for i in range(2):
    for j in range(3):
        for k in range(4):
            C[i,j,k] = A[i,k]*B[j,k]
这段代码可以工作,但我想知道:有没有一种不运行for循环的简单方法

上下文用于训练神经网络,长轴是训练示例。当计算成本函数的梯度时,我得到了这种形式的公式。 干杯 Leo

我倾向于用它来解决这些问题,这样就可以很容易地根据指数来指定应该发生什么:

>>> A = np.arange(8).reshape(2,4)
>>> B = np.arange(12).reshape(3,4)
>>> np.einsum('ik,jk->ijk', A, B)
array([[[ 0,  1,  4,  9],
        [ 0,  5, 12, 21],
        [ 0,  9, 20, 33]],

       [[ 0,  5, 12, 21],
        [16, 25, 36, 49],
        [32, 45, 60, 77]]])

您还可以使用普通的old:

上述内容相当于更简单的内容:

>>> A[:, None] * B
array([[[ 0,  1,  4,  9],
        [ 0,  5, 12, 21],
        [ 0,  9, 20, 33]],

       [[ 0,  5, 12, 21],
        [16, 25, 36, 49],
        [32, 45, 60, 77]]])
>>> A[:, None] * B
array([[[ 0,  1,  4,  9],
        [ 0,  5, 12, 21],
        [ 0,  9, 20, 33]],

       [[ 0,  5, 12, 21],
        [16, 25, 36, 49],
        [32, 45, 60, 77]]])