在Pytorch中tensor处理时我们经常会遇到矩阵之间的乘法运算,而对于不同的要求会有不同的计算方式,特别是Hadamard积与矩阵乘积之间的差别。
哈达玛积:对于两个举证或者数组A和B,A和B的维度至少是2,如果是二位数组,则AB两个数组相对应的维度的值必须相等,例如A为m*n的数组,仅当数组B满足维度为m*n时,A与B才能进行哈达玛积运算,具体计算方式如下:
代码示例:
a = torch.Tensor([[1,2], [3,4]])
b = torch.Tensor([[5,6], [7,8]])
hadamard_product = a * b
print('hadamard_product:', hadamard_product)
hadamard_product: tensor([[ 5., 12.],
[21., 32.]])
矩阵乘积:矩阵乘积就是线性代数中基本的矩阵乘法运算,它要求两个矩阵A和B的行数与列数相等,具体说明如下:
代码示例:
a = torch.Tensor([[1,2], [3,4]])
b = torch.Tensor([[5,6], [7,8]])
matrix_product = torch.matmul(a, b)
print('matrix_product:', matrix_product)
matrix_product: tensor([[19., 22.],
[43., 50.]])
注意:在Pytorch中,两个张量A和B只是进行A*B运算即是哈达玛积,如果需要进行矩阵运算,则需要调用torch.matmul()函数,简单来说哈达玛积不需要调用函数,而矩阵乘积需要调用矩阵乘法函数。Pytorch中是这样,其实numpy中的使用方式也是如此。