基本概念
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
点积
点积:指实数域中的两个向量运算得到一个实数值标量。
对于向量
a
=
(
x
1
,
y
1
)
和向量
b
=
(
x
2
,
y
2
)
,
它们的点积表示为
a
⋅
b
=
x
1
x
2
+
y
1
y
2
。
对于向量a=(x_1,y_1)和向量b=(x_2,y_2),\\它们的点积表示为a\cdot b=x_1x_2+y_1y_2。
对于向量a=(x1,y1)和向量b=(x2,y2),它们的点积表示为a⋅b=x1x2+y1y2。
矩阵乘法
两个矩阵运算需要满足矩阵乘法的规则,即前一个矩阵的列数等于后一个矩阵的行数。
矩阵
A
=
[
a
11
a
12
a
21
a
22
]
,矩阵
B
=
[
b
11
b
12
b
21
b
22
]
A
B
=
[
a
11
∗
b
11
+
a
12
∗
b
21
a
11
∗
b
12
+
a
12
∗
b
22
a
21
∗
b
11
+
a
22
∗
b
21
a
21
∗
b
12
+
a
22
∗
b
22
]
矩阵A=\begin{bmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{bmatrix},矩阵B=\begin{bmatrix} b_{11} & b_{12} \\ b_{21} & b_{22} \end{bmatrix} \\ AB=\begin{bmatrix} a_{11}*b_{11}+a_{12}*b_{21} & a_{11}*b_{12}+a_{12}*b_{22} \\ a_{21}*b_{11}+a_{22}*b_{21} & a_{21}*b_{12}+a_{22}*b_{22} \end{bmatrix}
矩阵A=[a11a21a12a22],矩阵B=[b11b21b12b22]AB=[a11∗b11+a12∗b21a21∗b11+a22∗b21a11∗b12+a12∗b22a21∗b12+a22∗b22]
np.dot()与@
np.dot()与@的用法相同。
对于秩为1的数组,执行点积运算;
对于秩不为1的二维数组,执行矩阵乘法;
秩为1的情况
dot
>>> A = np.arange(1,5)
>>> A
array([1, 2, 3, 4])
>>> B = np.arange(0,4)
>>> B
array([0, 1, 2, 3])
>>> np.dot(A,B)
20
@
>>> A = np.arange(1,4)
>>> A
array([1, 2, 3])
>>> B = np.arange(0,3)
>>> B
array([0, 1, 2])
>>> A@B
8
秩不为1的情况
dot
>>> A = np.arange(1,5).reshape(2,2)
>>> A
array([[1, 2],
[3, 4]])
>>> B = np.arange(0,4).reshape(2,2)
>>> B
array([[0, 1],
[2, 3]])
>>> np.dot(A,B)
array([[ 4, 7],
[ 8, 15]])
@
>>> A = np.arange(1,7).reshape(2,-1)
>>> A
array([[1, 2, 3],
[4, 5, 6]])
>>> B = np.arange(1,7).reshape(-1,2)
>>> B
array([[1, 2],
[3, 4],
[5, 6]])
>>> (np.mat(A))@(np.mat(B))
matrix([[22, 28],
[49, 64]])
np.multiply()
数组与矩阵对应位置相乘,输出与相乘的矩阵or数组大小相同
与数组相乘
A = np.arange(1,5).reshape(2,2)
>>> A
array([[1, 2],
[3, 4]])
>>> B = np.arange(0,4).reshape(2,2)
>>> B
array([[0, 1],
[2, 3]])
>>> np.multiply(A,B)
array([[ 0, 2],
[ 6, 12]])
与矩阵相乘
数组会自适应按列相乘还是按行相乘。
>>> A = np.arange(1,3).reshape(2,1)
>>> A
array([[1],
[2]])
>>> B
array([[0, 1],
[2, 3]])
>>> np.multiply(A,np.mat(B))
matrix([[0, 1],
[4, 6]])
>>> A
array([[1, 2]])
>>> B
array([[0, 1],
[2, 3]])
>>> np.multiply(A,np.mat(B))
matrix([[0, 2],
[2, 6]])
np.matmul()
matmul是matrix multiply的缩写,所以他是专门用于矩阵乘法的函数。
>>> A = np.arange(1,7).reshape(2,-1)
>>> A
array([[1, 2, 3],
[4, 5, 6]])
>>> B = np.arange(1,7).reshape(-1,2)
>>> B
array([[1, 2],
[3, 4],
[5, 6]])
>>> np.matmul(np.mat(A), np.mat(B))
matrix([[22, 28],
[49, 64]])
*
对数组执行对应位置相乘
对矩阵执行矩阵相乘
数组相乘
>>> A
array([1, 2, 3])
>>> B
array([0, 1, 2])
>>> A*B
array([0, 2, 6])
矩阵相乘
>>> A = np.arange(1,5).reshape(2,2)
>>> A
array([[1, 2],
[3, 4]])
>>> B = np.arange(0,4).reshape(2,2)
>>> B
array([[0, 1],
[2, 3]])
>>> (np.mat(A))*(np.mat(B))
matrix([[ 4, 7],
[ 8, 15]])