@TOC
一、numpy的矩阵乘法
numpy.dot(a, b, out=None)
当两个数据均为一维的时候,结果是内积,等效于np.matmul or a@b。当两个数据均为二维的时候,结果是矩阵乘法,依然等效于np.matmul or a@b
1 | # 1-D array |
1 | # 2-D array |
- 如果一个是向量,一个是标量,等价于
np.multiply or a*b
1 | # array and scalar |
- 如果a是N-D数组,b是1-D数组,最终是a和b最后一个轴的乘积(a sum product over the last axis of a and b)
1 | a = np.array([[1, 2, 3], [4, 5, 6]]) # array: 2 x 3 |
numpy.matmul(x1, x2)
面对2-D array与2-D array时与dot功能相同,同时类似于@,与dot不同的是matmul不能够进行矩阵与标量的乘法
1 | a = np.array([[1, 0], [0, 1]]) # array: 2 x 2 |
numpy.multiply(x1, x2)
numtiply针对的是标量的运算,同时类似于*,当两个向量参与运算时,得到的结果是对应位置的乘积
1 | result = np.multiply(2.0, 4.0) |
二、torch的矩阵乘法
torch.mul(input, other, *, out=None) → Tensor
有两种情况
- input是一个向量,other是一个标量或整数即可直接相乘
- input是一个向量,other是一个向量,对应位相乘且遵从broadcast机制
1 | # input:tensor--output:number |
1 | # input:tensor--output:tensor |
torch.mm(input, mat2, *, out=None) → Tensor
仅支持矩阵相乘,输入为(m,n)的矩阵,另一个矩阵维度必须为(n,p)的形式,因为此函数不支持broadcast机制
1 | mat1 = torch.randn(2, 3) |