推荐掌握np.dot和np.multiply
np.dot
numpy.dot(a, b, out=None)
情况1:
If both a and b are 1-D arrays, it is inner product of vectors (without complex conjugation).
示例:
np.dot([2j, 3j], [2j, 3j])
结果
(-13+0j)
情况2:
If both a and b are 2-D arrays, it is matrix multiplication.
示例:
c=np.array([[1,2,3],[4,5,6]])
d=np.array([[1,2,3],[4,5,6]])
print(np.dot(c,d.T))
结果
[[14 32]
[32 77]]
情况3:
计算1维数组或2维数组与标量相乘
示例:
mat= np.array([[2, 0], [0, 2]])
np.dot(mat,3) #相当于 print(3*mat)
结果
array([[6, 0],
[0, 6]])
情况4:
If a is an N-D array and b is a 1-D array, it is a sum product over the last axis of a and b.
即:
a.shape=
(
s
0
,
.
.
.
,
s
n
)
(s_{0},...,s_{n})
(s0,...,sn)
b.shape=
(
s
n
,
)
(s_{n},)
(sn,)
result= np.dot(a,b)
则 result.shape=(
s
0
s_{0}
s0,…,
s
n
−
1
s_{n-1}
sn−1)
其中 result
[
i
0
,
.
.
.
,
i
n
−
1
]
[i_{0},...,i_{n-1}]
[i0,...,in−1]为 a
[
i
0
,
.
.
.
,
i
n
−
1
,
:
]
[i_{0},...,i_{n-1,:}]
[i0,...,in−1,:] 和 b
作元素相乘的结果,即把a
沿着 axis
0 到
n
−
1
n-1
n−1进行切片,切成
s
0
×
⋯
×
s
n
s_{0}\times\dots\times s_{n}
s0×⋯×sn个和b
的shape相同的数组,然后再分别和 b
作内积
示例:
import numpy as np
mat= np.array([[[2, 0], [0, 3]]])
print('mat.shape=',mat.shape)
v=np.array([1,2])
print('v.shape=',v.shape)
print(np.dot(mat,v))#相当于 mat[0]和v.T矩阵相乘
结果
mat.shape= (1, 2, 2)
v.shape= (2,)
[[2 6]]
numpy.matmul
linalg.multi_dot(arrays, *, out=None)
官方文档
计算2维数组的矩阵乘法,可计算多个2维数组的矩阵乘法
示例:
a = np.array([[2, 0],[0, 2]])
b = np.array([[4, 1],[2, 2]])
print(np.matmul(a,b))
结果
[[8 2]
[4 4]]
可参考博文 numpy使用之np.matmul
numpy.linalg.multi_dot
linalg.multi_dot(arrays, *, out=None)
官方文档
计算2维数组的矩阵乘法,可计算多个2维数组的矩阵乘法
import numpy as np
a=np.array([[1,0],[0,1]])
b=np.array([[2,0],[0,2]])
c=np.array([[3,0],[0,3]])
print(np.linalg.multi_dot([a,b,c]))
结果:
[[6 0]
[0 6]]
np.multiply
numpy.multiply(x1, x2, out=None, *, where=True)
官方文档
相当于MATLAB中的矩阵点乘,即 element-wise product
示例:
import numpy as np
mat1= np.array([[[2, 1], [0, 3]]])
mat2= np.array([[1,2],[3,4]])
结果
array([[[ 2, 2],
[ 0, 12]]])
最新修订于2021年12月3日