仿射空间(affine space),仿射组合(affine combination)
2015-09-19 22:49
239 查看
现在做机器学习总要接触些线代没怎么交的数学概念… 而偏偏这些东西的定义又看起来极其抽象,又没什么靠谱的文章讲直观含义… 这里总结一下最近看的仿射空间的概念吧,看了好多英文文章才弄明白,免得以后忘了…
但是,没了原点就会引出一些麻烦:向量空间中,所有的向量都是从原点到空间中某一点的向量。现在没有原点了,这些向量就没有“根”了。
怎么办呢?我们不要向量的性质,只要这些单纯的点不就行了。于是原来向量空间V中的所有向量,由于没有了原点,就变成了一个点集X。
一个空间总是要有些运算的。这些点之间的运算可以很自然地用向量表示。我们定义两点之间的translation运算(非正式定义),从一个点x移动到另一个点y的运算可以用x和y之间的向量v表示(类似于向量空间):y=x+v。而所有这些translation对应的向量就组成了一个向量空间。
所以,仿射空间其实就是一个点集X外加一个X上的translation运算所依托的向量空间V,外加一些运算。
一个仿射空间就是一个点集X和一个向量集V(X和V维度相同),它满足以下公理:
(1)对所有x∈Xx\in X和u,v∈Vu,v\in V,满足x+(u+v)=(x+u)+vx+(u+v)=(x+u)+v。即translation复合后作用于x等价于两个translation分别作用于x
(2)对所有x∈Xx\in X,x+0=xx+0=x,即x加上0向量等于其自身
(3)对所有x∈Xx\in X,如果存在v∈Vv\in V,使得x+v=xx+v=x,则v=0v=0
(4)对所有的x,y∈Xx,y\in X,存在一个v∈Vv\in V,使得y=x+vy=x+v
有了上面的直观理解,正式定义就很好懂了。其实就是对于一个没有原点的向量空间,所有的向量都退化成了点。而这些点之间的translation运算又正好可以用向量表示。于是仿射空间就是一个点集外加一个translation运算所依托的向量所组成的向量空间。而上面的正式定义就是进一步规范这些运算。
注意,由上面第四条,仿射空间中两点唯一确定一个向量,可以写成v=y-x。其相当于一个仿射空间到向量空间的映射。
另外,仿射空间中的点,由于没有原点,是无法像向量空间那样用数值直接表示的。如果希望用数值表示,可以人为安置一个原点和一组基。所以,当希望表示一个不特指的空间时(比如二维空间中的一条任意的直线),用仿射空间是比较好的,而复杂的运算还是向量空间靠谱些。
而之所以要引入仿射空间,是希望对独立于坐标系的向量空间的不变量进行描述,它实际上放宽了向量空间的要求,从而促使人们在更一般的空间上研究某些不变的性质。比如,将一个二维向量空间,沿着三维空间的z轴向上平移1个单位(原点不动),就得到了一个二维仿射空间。这时,其失去了原点,但其本身还是跟向量空间十分相像。我们就是希望研究这种情况而引入了仿射空间。
假设有甲乙两人,其中甲知道一个空间中真正的原点,但是乙认为另一个点p才是原点(甲所在的就是向量空间,乙则是给其所在的仿射空间人为安置了一个原点)。现在求两个向量a和b的和。乙画出p到a和p到b的箭头,然后用平行四边形找到他认为的向量a + b。但是甲认为乙画出的是向量p +(a − p) +(b − p)。同样的,甲和乙可以计算向量a和b的其他线性组合,通常情况下他们会得到不同的结果。
然而,请注意:
如果线性组合系数的和为1,那么甲和乙将得到同样的结果!
比如若甲得到:λa+(1−λ)b\lambda a + (1-\lambda)b
则乙会得到:p+λ(a−p)+(1−λ)(b−p)=λa+(1−λ)bp+\lambda(a-p)+(1-\lambda)(b-p)=\lambda a + (1-\lambda)b
甲知道空间的“线性结构”。但是甲和乙都知道空间的“仿射结构”,即他们都知道空间中仿射组合的值。
其中仿射组合(affine combination)的定义为系数和为1的线性组合。而之所以叫仿射组合,很大程度上是因为其揭示了一种向量空间和其平移后得到的仿射空间之间的一种不变性。
仿射组合的正式定义:
向量x1,x2,...,xnx_1,x_2,...,x_n的一个线性组合:
∑i=1naixi\begin{equation}
\sum_{i=1}^n a_i x_i
\end{equation}
其满足:
∑i=1nai=1\begin{equation}
\sum_{i=1}^n a_i = 1
\end{equation}
直观解释
一句话概括,仿射空间(affine space)的概念极其简单,就是没有原点的向量空间。但是,没了原点就会引出一些麻烦:向量空间中,所有的向量都是从原点到空间中某一点的向量。现在没有原点了,这些向量就没有“根”了。
怎么办呢?我们不要向量的性质,只要这些单纯的点不就行了。于是原来向量空间V中的所有向量,由于没有了原点,就变成了一个点集X。
一个空间总是要有些运算的。这些点之间的运算可以很自然地用向量表示。我们定义两点之间的translation运算(非正式定义),从一个点x移动到另一个点y的运算可以用x和y之间的向量v表示(类似于向量空间):y=x+v。而所有这些translation对应的向量就组成了一个向量空间。
所以,仿射空间其实就是一个点集X外加一个X上的translation运算所依托的向量空间V,外加一些运算。
正式定义
以下定义翻译自:Guide to Computational Geometry Processing,J.A. Bærentzen et al.一个仿射空间就是一个点集X和一个向量集V(X和V维度相同),它满足以下公理:
(1)对所有x∈Xx\in X和u,v∈Vu,v\in V,满足x+(u+v)=(x+u)+vx+(u+v)=(x+u)+v。即translation复合后作用于x等价于两个translation分别作用于x
(2)对所有x∈Xx\in X,x+0=xx+0=x,即x加上0向量等于其自身
(3)对所有x∈Xx\in X,如果存在v∈Vv\in V,使得x+v=xx+v=x,则v=0v=0
(4)对所有的x,y∈Xx,y\in X,存在一个v∈Vv\in V,使得y=x+vy=x+v
有了上面的直观理解,正式定义就很好懂了。其实就是对于一个没有原点的向量空间,所有的向量都退化成了点。而这些点之间的translation运算又正好可以用向量表示。于是仿射空间就是一个点集外加一个translation运算所依托的向量所组成的向量空间。而上面的正式定义就是进一步规范这些运算。
注意,由上面第四条,仿射空间中两点唯一确定一个向量,可以写成v=y-x。其相当于一个仿射空间到向量空间的映射。
另外,仿射空间中的点,由于没有原点,是无法像向量空间那样用数值直接表示的。如果希望用数值表示,可以人为安置一个原点和一组基。所以,当希望表示一个不特指的空间时(比如二维空间中的一条任意的直线),用仿射空间是比较好的,而复杂的运算还是向量空间靠谱些。
而之所以要引入仿射空间,是希望对独立于坐标系的向量空间的不变量进行描述,它实际上放宽了向量空间的要求,从而促使人们在更一般的空间上研究某些不变的性质。比如,将一个二维向量空间,沿着三维空间的z轴向上平移1个单位(原点不动),就得到了一个二维仿射空间。这时,其失去了原点,但其本身还是跟向量空间十分相像。我们就是希望研究这种情况而引入了仿射空间。
仿射组合(affine combination)
想讲这个主要是因为Wikipedia关于仿射空间的定义第一段的直观解释就是讲这个东西。然后我一度以为那一段是在讲仿射空间的直观解释,耽误了好多时间。于是这里就干脆顺带把仿射组合也讲了好了(大部分是复制中文Wikipedia,有一些修改)。假设有甲乙两人,其中甲知道一个空间中真正的原点,但是乙认为另一个点p才是原点(甲所在的就是向量空间,乙则是给其所在的仿射空间人为安置了一个原点)。现在求两个向量a和b的和。乙画出p到a和p到b的箭头,然后用平行四边形找到他认为的向量a + b。但是甲认为乙画出的是向量p +(a − p) +(b − p)。同样的,甲和乙可以计算向量a和b的其他线性组合,通常情况下他们会得到不同的结果。
然而,请注意:
如果线性组合系数的和为1,那么甲和乙将得到同样的结果!
比如若甲得到:λa+(1−λ)b\lambda a + (1-\lambda)b
则乙会得到:p+λ(a−p)+(1−λ)(b−p)=λa+(1−λ)bp+\lambda(a-p)+(1-\lambda)(b-p)=\lambda a + (1-\lambda)b
甲知道空间的“线性结构”。但是甲和乙都知道空间的“仿射结构”,即他们都知道空间中仿射组合的值。
其中仿射组合(affine combination)的定义为系数和为1的线性组合。而之所以叫仿射组合,很大程度上是因为其揭示了一种向量空间和其平移后得到的仿射空间之间的一种不变性。
仿射组合的正式定义:
向量x1,x2,...,xnx_1,x_2,...,x_n的一个线性组合:
∑i=1naixi\begin{equation}
\sum_{i=1}^n a_i x_i
\end{equation}
其满足:
∑i=1nai=1\begin{equation}
\sum_{i=1}^n a_i = 1
\end{equation}
相关文章推荐
- 十六进制颜色宏
- json对象和json字符串有啥区别啊
- 【Xamarin 开发 IOS --使用 Storyboard Segue 实作 UIViewController 的切换 (实例)】
- 各种排序算法的实现Java
- BestCoder Round #56 (div.2)(Clarke and minecraft)
- opencv训练分类器(HAAR,LBP等特征)
- hdu 5452 Minimum Cut 树形dp
- wxWidgets Tips: Compile wxWidgets 3.0.2 using Visual Studio 2015
- 求DAG上两点的最短距离
- 读完这100篇论文 就能成大数据高手
- 黑马程序员-------IO流
- android------创建模拟器时不能点CPU/ABI
- Jsp和Servlet的联系与区别
- oracle中函数和存储过程的区别和联系【转载竹沥半夏】
- 高质量C++/C编程指南
- C++中一些概念
- Android0919<二十三>(ViewGroup、Animation、Animator、Layout Animations)
- 朴素贝叶斯分类器
- 重造轮子-栈实现队列
- 使用GIT进行代码管理的心得