问题描述
我正在尝试在特定维度上对元素的所有组合进行乘法。 例如, 使用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]
这对于2维(A.shape =(4,2),B.shape =(4,2))很好。
但是,当我将上述过程扩展到3维时(A.shape =(2,4,2),B.shape =(2,2))。
我尝试过
A[:,:,0]
如何在不使用for循环的情况下做到这一点?
对于二维张量,这就是我所得到的
a = torch.FloatTensor([[0,1],[0,2],3],4]])
b = torch.FloatTensor([[1,0],[2,[3,[4,0]])
c = a[:,0] * b[:,1]
print(c)
tensor([[ 1.,2.,3.,4.],[ 2.,4.,6.,8.],[ 3.,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[:,0] * B[:,1] << RuntimeError
RuntimeError: The size of tensor a (4) must match the size of tensor b (2) at non-singleton dimension 1
我想要的是
tensor([[[ 1.,16.]],[[ 1.,16.]]])
如果不使用维度0中的for循环,我想不出一种方法。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)