从numpy到Pytorch的矩阵乘法(逐元素)

时间:2019-05-28 12:22:57

标签: python pytorch matrix-multiplication

我有两个numpy数组(图像和环境图),

MatA
MatB

形状均为(256, 512, 3)

当我用numpy进行乘法时(元素方式):

prod = np.multiply(MatA,MatB)

我得到了想要的结果(当回到“图像”时通过枕头显示)

但是当我使用pytorch进行操作时,我得到了一个非常奇怪的结果(甚至与上述结果都不接近)。

我是用以下代码完成的:

MatATensor = transforms.ToTensor()(MatA)
MatBTensor = transforms.ToTensor()(MatB)

prodTensor = MatATensor * MatBTensor

由于某些原因,MatATensor和MatBtensor的形状均为

torch.Size([3, 256, 512])

与prodTensor相同。 当我尝试将其重塑为(256,512,3)时,出现了错误。

有没有办法获得相同的结果?

我是pytorch的新手,所以我们将不胜感激。

2 个答案:

答案 0 :(得分:1)

如果您阅读transforms.ToTensor()的文档,您会发现此转换不仅将numpy数组转换为torch.FloatTensor,而且还从H x {{1} } x {W3 x 3 x H
要“撤消”此操作,您需要

W

有关更多信息,请参见permute

答案 1 :(得分:0)

我建议您使用torch.from_numpy,它可以轻松地将ndarray转换为割炬张量。如:

In[1]: MatA = np.random.rand(256, 512, 3)
In[2]: MatB = np.random.rand(256, 512, 3)

In[3]: MatA_torch = torch.from_numpy(MatA)
In[4]: MatB_torch = torch.from_numpy(MatB)

In[5]: mul_np = np.multiply(MatA, MatB)
In[6]: mul_torch = MatA_torch * MatB_torch

In[7]: torch.equal(torch.from_numpy(mul_np), mul_torch)
Out[7]: True

In[8]: mul_torch.shape
Out[8]: torch.Size([256, 512, 3])

如果您希望将其恢复为numpy,请执行以下操作:

mul_torch.numpy()