- 向量是指具有大小和方向的量。
- 方向是原点到期坐标的连线。
- 假设在二维平面有一个点 x = 2, y = 1
向量的模
- 向量的模也成为向量的大小,它是一个标量。
- 对于二维向量(1,2),它的模为根号5
- 对于n维向量的大小计算
向量的点乘(内积)
- 点乘的结果是一个标量
- 叉乘的结果是一个向量
v = np.array([2,1])
s = np.array([-3,2])
d = np.dot(v,s) # 方法名是 dot
print(d)
print(v @ s) # 或者直接用 @ 操作符
- 向量的点乘可以用来计算两个向量的夹角
v = np.array([2,1])
s = np.array([-3,2])
vMag = np.linalg.norm(v) # 计算标量
sMag = np.linalg.norm(s)
cos = (v @ s) / (vMag * sMag) # 点乘除标量积是余弦
theta = math.degrees(math.acos(cos))
单位矩阵
- 对角线都为1的矩阵叫做单位矩阵
可见变换T是一个从二维实数向量向另一个二维实数向量的变换,输出向量的维度可以和原向量不同。
import matplotlib.pyplot as plt
%matplotlib inline
v = np.array([1,0])
A = np.array([[0,-1],
[1,0]])
t = A@v
vecs = np.array([v,t])
origin = [0], [0]
plt.axis('equal')
plt.grid()
plt.ticklabel_format(style='sci', axis='both', scilimits=(0,0))
plt.quiver(*origin, vecs[:,0], vecs[:,1], color=['orange', 'blue'], scale=10)
plt.show()
cos, sin, pi = math.cos, math.sin, math.pi
def rotate(a):
return np.array([[cos(a), -sin(a)],
[sin(a),cos(a)]])
v = np.array([1,0])
alpha = pi/5 # 旋转36°
beta = pi/4 # 旋转45°
gamma = pi/3 # 旋转60°
vecs = np.array([v, *[rotate(a)@v for a in [alpha, beta, gamma]]])
origin = [0], [0]
plt.axis('equal')
plt.grid()
plt.ticklabel_format(style='sci', axis='both', scilimits=(0,0))
plt.quiver(*origin, vecs[:,0], vecs[:,1], color=['r', 'b', 'm', 'g'], scale=10)
plt.show()
总结
原文地址:https://github.com/microsoft/ai-edu/blob/master/A-基础教程/A1-PythonBasic/math_intro/03_线性代数.ipynb。
看完这篇文章,我更加理解了向量和矩阵相乘的实际意义。
最后希望大家多多评论、关注、点赞、转发,你们的支持,是我更新下去的最大动力。
,