如何在PyTorch中实现张量转置并与自身相乘得到指定矩阵
在PyTorch中计算目标矩阵的方法
你需要的其实是原张量与其转置的矩阵乘法结果(本质是Gram矩阵,每个元素对应原张量两行的点积),以下是几种简洁的实现方式:
方法1:直接使用矩阵乘法运算符@
这是最直观的写法,Python的矩阵乘法运算符@在PyTorch张量上同样适用:
result = t @ t.T
方法2:使用torch.matmul函数
如果需要更明确的函数调用方式,可以用PyTorch的矩阵乘法函数:
result = torch.matmul(t, t.T)
方法3:使用torch.einsum(爱因斯坦求和约定)
这种方式灵活性更高,适合理解底层的运算逻辑:
result = torch.einsum('ij,kj->ik', t, t)
这里的'ij,kj->ik'表示:对j维度求和,将t的第i行、第j列元素,和t的第k行、第j列元素相乘后累加,最终得到维度为i×k的结果,正好符合你的需求。
验证结果
运行上述任意一种方法后,得到的结果张量为:
tensor([[ 2, 4, 6], [ 4, 8, 12], [ 6, 12, 18]])
完全匹配你描述的计算规则:对角线第一个元素是1×1+1×1=2,第二个是2×2+2×2=8,第一列第二个元素是2×1+2×1=4等。
内容的提问来源于stack exchange,提问作者zbot_348
相关产品推荐
相关产品推荐

