Python 在一定维度上所有元素组合的乘法
我试着把某个维度上所有元素的组合进行乘法。 例如 使用for循环将是Python 在一定维度上所有元素组合的乘法,python,pytorch,batch-processing,multiplication,Python,Pytorch,Batch Processing,Multiplication,我试着把某个维度上所有元素的组合进行乘法。 例如 使用for循环将是 for a,i in enumerate(A): for b,j in enumerate(B): c[i][j] = a[1]*b[0] 不使用for循环将是错误的 A[:,None,1]*B[:,0] 这对于二维(A.shape=(4,2),B.shape=(4,2))很有效 然而,当我将上述过程扩展到三维时(A.shape=(2,4,2),B.shape=(2,4,2)) 我试过了 A[:,
for a,i in enumerate(A):
for b,j in enumerate(B):
c[i][j] = a[1]*b[0]
不使用for循环将是错误的
A[:,None,1]*B[:,0]
这对于二维(A.shape=(4,2),B.shape=(4,2))很有效
然而,当我将上述过程扩展到三维时(A.shape=(2,4,2),B.shape=(2,4,2))
我试过了
A[:,:,1]*B[:,:,None,0]
但是给了我一个错误
如果不使用for循环,如何执行此操作
对于二维张量,这就是我得到的
a = torch.FloatTensor([[0,1],[0,2],[0,3],[0,4]])
b = torch.FloatTensor([[1,0],[2,0],[3,0],[4,0]])
c = a[:,None,0] * b[:,1]
print(c)
tensor([[ 1., 2., 3., 4.],
[ 2., 4., 6., 8.],
[ 3., 6., 9., 12.],
[ 4., 8., 12., 16.]])
但在这种情况下
A = torch.cat([a.unsqueeze(0),a.unsqueeze(0)],dim=0)
B = torch.cat([b.unsqueeze(0),b.unsqueeze(0)],dim=0)
C = A[:,:,None,0] * B[:,:,1] << RuntimeError
RuntimeError: The size of tensor a (4) must match the size of tensor b (2) at non-singleton dimension 1
如果不在维度0中使用for循环,我想不出一种方法来实现这一点。请始终发布错误消息和整个stacktrace。@Sukwon,你能给我一个小表格,例如3x3,说明你到底想计算什么吗?顺便说一句,你的第一个例子就是特定列的外积:
torch.outer(a[:,1],B[:,0])
。3维的预期输出形状是什么<代码>(2,4,2,4)?@aerijman添加了示例@Berriel我预计输出形状为(2,4,4,1)
tensor([[[ 1., 2., 3., 4.],
[ 2., 4., 6., 8.],
[ 3., 6., 9., 12.],
[ 4., 8., 12., 16.]],
[[ 1., 2., 3., 4.],
[ 2., 4., 6., 8.],
[ 3., 6., 9., 12.],
[ 4., 8., 12., 16.]]])