天天看点

向量的模、点乘、叉乘,矩阵乘法和np.dot(a,b)

文章目录

    • 向量定义:
    • 向量的模
    • 向量点积(内积)
      • 几何意义
    • 向量叉积(外积)
      • 几何意义
    • 矩阵乘法
    • np.dot(a,b)

向量定义:

既有方向又有大小的量。

设今有向量:

A ⃗ \vec A A

=(a1,a2), B ⃗ \vec B B

=(b1,b2)

向量的模

∣ A ⃗ ∣ |\vec A| ∣A

∣ = a 1 2 + a 2 2 \sqrt{a_1^2+a_2^2} a12​+a22​

A B → \overrightarrow{AB} AB

= (b1-a1,b2-b1) , 则:

∣ A B → ∣ |\overrightarrow{AB}| ∣AB

∣ = ( a 1 − b 1 ) 2 + ( a 2 − b 2 ) 2 \sqrt{(a_1-b_1)^2 + (a_2-b_2)^2} (a1​−b1​)2+(a2​−b2​)2

向量点积(内积)

A和B的点积:

A*B=|A||B|cosθ (θ为向量A和B的夹角)

A*B = a1b1+a2b2

几何意义

几何意义为向量A在向量B上投影的长度乘再以向量B的长度。

  • 点积的结果是一个数,又名数量积
  • A*B=B*A

向量叉积(外积)

则A和B的叉积:

AxB=a1b2-a2b1

AxB=|A||B|sinθ (θ为向量A和B的夹角)

几何意义

AxB的结果是一个向量, 这个向量的方向垂直于A,B所构成平面的(即法向量),|A x B|是向量A、B组成平行四边形的面积的大小

  • 叉乘结果是一个向量,又名向量积
  • A x B= -B x A

矩阵乘法

向量的模、点乘、叉乘,矩阵乘法和np.dot(a,b)

np.dot(a,b)

import numpy as np

# 1. 点积,满足交换律
a1 = np.array([[1, 2],
               [3, 4]])
b1 = np.array([[5, 6],
               [7, 8]])
c1 = a1 * b1  # 点积,要求a1和b1的维度相同
print(c1)
"""
c1 : [[5, 12],
      [21, 32]]
      
5= 1*5
12 = 2*6
21 = 3*7
32 = 4*8
"""

# 2.1 dot矩阵乘法(矩阵乘矩阵),不满足交互率
a2 = np.array([[1, 2, 3],
               [4, 5, 6]])
b2 = np.array([[5, 6],
               [7, 8],
               [9, 10]])
# c2 = np.dot(a2, b2)
c2 = a2.dot(b2)
print(c2)
"""
c2 : [[46, 52]
      [109,124]]
46 = 1*5+2*7+3*9
52 = 1*6+2*8+3*10
109 = 4*5+5*7+6*9
124 = 4*6+5*8+6*10
"""

# 2.2 dot 向量点积(向量乘向量),满足交换律
a3 = np.array([1, 2, 3, 4, 5])
b3 = np.array([6, 7, 8, 9, 10])
# c3 = np.dot(a3, b3.T)
# c3 = np.dot(a3, b3)
c3 = np.dot(b3, a3)
print(c3)  # 130

# 2.3 矩阵乘向量,当相乘的有其中一个为矩阵时,另外一个自动转换成矩阵
a4 = np.random.randint(10, size=(3, 2))  # 矩阵
print(a4)
b4 = np.array([1, 2])  # 向量(在相乘时自动转换为矩阵)
# b4 = np.array([1, 2]).T
c4 = np.dot(a4, b4)
print(c4)

# 矩阵和向量的shape区别
x = np.array([[1, 2, 3]]).T
y = np.array([1, 2, 3]).T
print("shape of matrix x: " + str(x.shape))  # (3, 1)
print("shape of vector y: " + str(y.shape))  # (3,)