线性代数学习笔记(二)

"数学是打开科学大门的钥匙。——培根"

Posted by YelonhimX on November 8, 2019

线性代数笔记(二)

2. 更多向量的高级话题

2.1. 规范化和单位向量

  • 向量的长度
    • 作为有向线段,向量既有方向也有大小

    la-2-1.jpg

    根据勾股定理有:

    记作:

    其中:

    即为向量的

  • 三维空间内向量的模:

    LA2-1-2.jpg

    如图:

    则:

  • n维向量同理:

  • 单位向量:
  • 根据$\vec{u}$求出$\hat{u}$的过程:归一化规范化(normalize)

  • 单位向量有无数个:

    • 单位圆内从原点到圆上任何一点
    • 二维空间中,有两个特殊的单位向量:

      只有0,1组成的单位向量:标准单位向量(Standard Unit Vector) 它们指向坐标轴的正方向

      • 二维空间中有两个标准单位向量
      • 三维空间中有三个
      • n为空间中有n个标准单位向量

2.2. 实现向量规范化和单位向量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import math
from ._global import EPSILON
class vector:

    def __init__(self,lst):
        self._values = list(lst)
        #构造函数,初始化类,将数组传入,用list方法复制lst变量,确保vector不可更改性

    @classmethod
    def zero(cls,dim):
        #返回一个dim维的零向量
        return cls([0]*dim)
    
    def norm(self):
      return math.sqrt(sum(e**2 for e in self))
      #求模运算

    def normalize(self):
    #求单位向量,即规范化
      return Vector([e/ self.norm() for e in self])
      #also write as : return 1/ self.norm()*Vcctor(self._values)

    def __truediv__(self,k):
      #向量数量除法
      if self.norm <EPSILON :
        raise "Error"
      #为了甄别零向量,需要加一个前提判断,
      #即模如果为零,则范围Error,
      #但浮点数判断不可用‘==’,故而需要使用极限法,
      #定义一个全局私有变量`EPSILON`,
      #在包内增加一个`_global.py`文件
      return (1/k)*self

_global.py文件:

1
EPSILON = 1e-8

2.3. 向量的点乘

  • 两个向量相乘

两个向量“相乘”,结果是一个数(标量) 更严格的说法:两个向量的点乘内积

  • 证明:

如图,

LA2-3-1.jpg

二维空间中:

由三角形,有:

移项,得:

两边除以$\frac{1}{2}$,得:

展开整理,得:

同理,n维向量有:

2.4. 向量点乘的几何理解

如图:

LA2-4-1.jpg

可以看到,$\text{向量同}\cos{\theta}\text{相乘}$实际上就是将原向量投影到另外一个向量的同一方向

2.5. 实现向量点乘

1
2
3
4
#单独设立一个方法`dot`来标记向量点乘
def dot(self,another):
  assert len(self) == len(another),"Error"
  return sum(a*b for a,b in zip(self,another))
  • 有些数学库会将u*v定义为逐元素相乘的向量,由于这个计算不具备数学含义,所以实现中不取

2.6. 向量点乘的意义

  • 向量点乘的应用:

可得:

回忆标准单位向量

二维空间:

三维空间:

判断两个向量的相似程度(推荐系统)

LA2-6-1.png

几何计算

  • 求取向量投影点的点坐标

LA2-6-2.png

投影点的距离:

投影点的方向(单位向量):$\hat{u}$

投影点的坐标:

2.7. Numpy的使用

1
2
3
4
5
6
7
import numpy as np
if __name__ == "__main__":

  print(np.__version__)
  vec = np.array([1,2.3])
  #np数组存储向量
  

更多详细可参见两篇文章。



TOP