程序员的自我修养之数学基础02:向量(向量的运算、模、夹角、距离和Python实现)

news/2024/8/27 8:46:21 标签: 线性代数, 向量, 程序员的数学, 内积, 外积

1. 什么是向量

数学概念嘛,在不同的应用场景下意义是不大一样的,比如说对于机械或者物理的同学,向量是有长度有方向的一个指向空间的带箭头的线段,而对于从事计算机工作的我们来说,向量的定义可以是非常简单粗暴的——

“把数排成一列就是向量

是不是很简单?吼吼。当我们需要把一些数据放在一起作为一个整体来处理的时候,我们就用到了向量。比如,下面就分别是我们熟知的,一维向量、二维向量、三维向量了。
在这里插入图片描述
在没有特殊说明的情况下,我们通常说的向量,一般都指向量。但是由于列向量的写法比较占用空间,所以一般用“横向量的转置”来表示,如下所示,其中T代表Transpose。
在这里插入图片描述
在翻看了一些资料之后,我对向量有了不一样的理解。在计算机领域,其实,我们并不关注向量的“几何意义”,因为我们通常用到的向量,维数都相当高,意义也很复杂。对于程序员来说,向量的意义是我们”自定义“的;对于计算机来说,向量的计算也只是数字的计算。因此,向量的几何意义只是我们用来理解向量的基础计算的一种便于理解的方式,它实际上就是一种编程的“数据结构“。
在Python中可以用 Numpy 的 ndarray 来表示向量:

import numpy as np
a = np.array ( [ -1, 2, 8] )

向量的转置实现如下,注意上面声明 a 时用了两对 [] 以生成一个二维向量,一维的向量转置结果不变。

>>> b = np.array([2, 4])
>>> b.T
array([2, 4]) 

>>> a = np.array([[2, 4]])
>>> a.T
array([[2],
       [4]])

有了向量这种“数据结构”,那我们就可以定义其运算规则了。

2. 向量的运算规则

向量的加法和数量乘法:

相同维数的向量之间的加法就是对应元素相加。在几何意义上表示两个向量收尾相连得到的新向量(“三角形法则”)。
在这里插入图片描述
在这里插入图片描述
向量的数量乘法即用一个常量乘上一个向量,意味着向量长度的拉伸、压缩或反向操作,这种操作可以用一个术语来描述——Scaling。
在这里插入图片描述
向量加法、数乘的Python实现如下:

import numpy as np
a = np.array ([-1, 2])
b = np.array ([3, 1])
print (a + b)  # [2, 3]
print (a - b)  # [-4, 1]
print (2 * a)   # [-2, 4] 

向量的加法和数乘满足交换律、结合律、分配率。

向量内积外积

向量内积外积,在我看来是比较鸡肋的,因为在坐标系改变的情况下,这两种运算的数值也会发生变化,而且在高维的应用中,它们的意义也是非常模糊的,因此在这里就只是简单过一下。
向量内积(dot product/ scalar product),也叫作向量的点积、数量积,其结果为一个实数,计算方式如下:
在这里插入图片描述
向量内积有以下运算规律:
在这里插入图片描述
向量外积,也叫作向量的叉乘,其结果是一个方向垂直于原来两个向量向量,其计算方式如下:
在这里插入图片描述
向量外积的python实现如下:

import numpy as np
a = np.array([3, 5, 2])
b = np.array([1, 4, 7])
print a.dot(b)  # 内积:37
print np.dot(a, b)  # 内积:37(另一种等价写法)
print np.cross(a, b)  # 外积:[27, -19, 7]

向量的投影

向量的投影原理如图所示:
在这里插入图片描述
其Python实现如下:

import numpy as np
def get_projection(a, b): 
	return a.dot(b)*1.0*b/b.dot(b) 
	
a = np.array([1, 2])
b = np.array([2, 2])
print get_projection(a, b)  # [1.5 1.5]

向量的模

我们规定,对于向量
在这里插入图片描述
它的模(或长度)为:
在这里插入图片描述
也就是说,
在这里插入图片描述
关于向量的模,还有一些七七八八的计算法则,在这里就简单点一下:
在这里插入图片描述
在Python中可以用np.linalg.norm()函数实现向量模的计算:

import numpy as np
x = np.array([1,2,3,4,5])
np.linalg.norm(x)  #结果:7.416198487095663

向量的夹角和距离

在这里插入图片描述
在这里插入图片描述
这都是初中还是高中学过的内容了,就不多说了,Bye~

参考:
https://www.cnblogs.com/zhangdongsheng/p/5229525.html
https://blog.csdn.net/swartz_lubel/article/details/78360138
https://blog.csdn.net/qq_23869697/article/details/82693000
https://wenku.baidu.com/view/6b3e2fdca58da0116c174912.html?sxts=1567562044157


http://www.niftyadmin.cn/n/1397668.html

相关文章

程序员的自我修养之数学基础03:矩阵的意义和运算

什么是矩阵? 按照课本上的定义: 矩阵就是由m行n列数放在一起组成的数学对象。 或者更简单一点: 把数列排成矩形,就是矩阵。 对于一个n行m列的矩阵,我们把它叫做一个nm矩阵。当矩阵的行数和列数相同时,我们…

程序员的自我修养之数学基础04:特殊矩阵(零矩阵、单位矩阵、对角矩阵、逆矩阵、转置矩阵、对称矩阵)

零矩阵 零矩阵就是所有元素都是0的矩阵,一般记做O。可以在后面加 m,n 表示其规模。 在前一章,我们讲到,矩阵就是映射。零矩阵,就表示了将所有的点都映到原点的映射。 因此,对于任意向量 x,都有 Ox o。对…

机器视觉基础:卷积

学习机器视觉,绕不开的就是各种卷积操作,那什么是卷积呢? 当当当当,你以为我会打很久字自己解释吗?naive! 我只是知识的搬运工: https://www.zhihu.com/question/22298352 Bye~

【MQ笔记】相机标定原理及实现

这是我做的一个简单的关于相机标定的总结PPT,包含简单的原理介绍、标定方法分类和程序实现(Python和MATLAB),请点击查看大图~ peace and love~

程序员的自我修养之数学基础05:线性方程组解的情况(矩阵的初等变换和高斯消元法)

真是非常不情愿啊,之前刚刚把矩阵变化讲得非常“玄幻”,但是马上又要转到枯燥的计算上来了。 线性方程组是各个方程关于未知量均为一次的方程组。啥意思呢,举个栗子: 上面就是一个典型的线性方程组了,该方程组中共包含…

程序员的自我修养之数学基础10:超定方程的求解

超定方程 超定方程,即方程个数大于未知量个数的方程组(与之对应的,欠定方程是方程个数小于未知量个数的方程组)。前面说过了,线性方程组可以改写为矩阵的形式的形式。其中,是一个的系数矩阵,是…

【MQ笔记】超简单的最小二乘法拟合平面(Python)

这篇笔记中,我主要通过解决“由离散点拟合平面”这个小问题,学习了超定方程最小二乘解的求解方法。在这里我整理了两种求解思路用以交流。 直接求解超定方程。 我们知道,对于一个平面,其方程可以用来表示。由离散点拟合平面&…

【MQ笔记】这可能是目前最详细的相机标定坐标转换介绍了~

在我之前的博文 https://blog.csdn.net/qq_45427038/article/details/99672093 里,介绍了计算机视觉系统中涉及到的4种坐标系:图像像素坐标系、图像物理坐标系、相机坐标系和世界坐标系。但是对于这些坐标系之间的转换方式介绍的比较粗略,所以…