在python numpy中获取张量积而不执行求和
我有两个张量,每个2D,有一个共同的长轴(例如20.000)和不同的短轴(例如一个9另一个10)。我想以9X10X20000张量结束,这样对于长轴上的每个位置,其他两个轴就是张量积。 明确地说,对于这里的“长”轴4,我想做:在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
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]]])