如何将 torch[N,1] 和 torch[1,N] 相乘?

How to multiply torch[N,1] and torch[1,N]?

我想通过将 2 个火炬向量 A(shape[N,1]) 和 B=A'(shape[1,N]) 相乘来计算矩阵 (shape[N,N])。

当我使用 torch.matmultorch.mm 时,出现错误或 A'A(shape[1,1]).

如果A表示为 A = [a_1, a_2, ..., a_N]',我想计算一个矩阵C,其(i,j)元素为

for i in range(N):
     for j in range(N):
       C(i,j) = a_i * a_j

我想快速计算一下。你有什么想法? 感谢您的帮助!

如果我理解正确的话,你可以这样做:

A = torch.randint(0,5,(5,))
C = (A.view(1, -1) * A.view(-1, 1)).to(torch.float)

它产生:

tensor([[ 1.,  4.,  3.,  3.,  0.],
        [ 4., 16., 12., 12.,  0.],
        [ 3., 12.,  9.,  9.,  0.],
        [ 3., 12.,  9.,  9.,  0.],
        [ 0.,  0.,  0.,  0.,  0.]])

这相当于写作:

 D = torch.zeros((5,5))
for i in range(5):
  for j in range(5):
    D[i][j] = A[i] * A[j]

结果是:

tensor([[ 1.,  4.,  3.,  3.,  0.],
        [ 4., 16., 12., 12.,  0.],
        [ 3., 12.,  9.,  9.,  0.],
        [ 3., 12.,  9.,  9.,  0.],
        [ 0.,  0.,  0.,  0.,  0.]])

您可以简单地执行以下操作:

import torch
A = torch.randint(0, 5, (3, 2))
B = torch.randint(0, 5, (2, 3))

答:

tensor([[1, 3],
        [2, 1],
        [1, 3]])

乙:

tensor([[1, 0, 3],
        [3, 4, 1]])
C = A @ B # python 3.5+

C:

tensor([[10, 12,  6],
        [ 5,  4,  7],
        [10, 12,  6]])