精华内容
下载资源
问答
  • 首先找出起点终点之间...deltaY = P2_y - P1_ydeltaX = P2_x - P1_x然后计算角度(从P1X轴到P1正Y轴)。angleInDegrees = arctan(deltaY / deltaX) * 180 / PI但是arctan可能并不理想,因为这样划分差异将消除...

    首先找出起点和终点之间的区别(这里,这更多的是一条有向线段,而不是“直线”,因为直线无限延伸,而不是从某个特定点开始)。deltaY = P2_y - P1_y

    deltaX = P2_x - P1_x

    然后计算角度(从P1的正X轴到P1的正Y轴)。angleInDegrees = arctan(deltaY / deltaX) * 180 / PI

    但是arctan可能并不理想,因为这样划分差异将消除区分角度所在象限所需的区别(见下文)。如果您的语言包含一个atan2函数,请使用以下内容:angleInDegrees = atan2(deltaY, deltaX) * 180 / PI

    编辑(2017年2月22日):然而,一般来说,仅仅为了获得cos和sin的正确角度而调用atan2(deltaY,deltaX)可能是不雅的。在这些情况下,您通常可以执行以下操作:将(deltaX, deltaY)视为向量。

    将该向量规格化为单位向量。为此,将deltaX和deltaY除以向量的长度(sqrt(deltaX*deltaX+deltaY*deltaY)),除非长度为0。

    之后,deltaX将是向量和水平轴之间的夹角的余弦(在P1处从正X轴到正Y轴的方向)。

    现在deltaY就是这个角度的正弦。

    如果向量的长度为0,它与水平轴之间就没有夹角(因此它就没有有意义的正弦和余弦)。

    编辑(2017年2月28日):即使没有规范化(deltaX, deltaY):符号deltaX将告诉您步骤3中描述的余弦是正的还是负的。

    符号deltaY将告诉您步骤4中描述的正弦是正的还是负的。

    符号deltaX和deltaY将告诉您相对于P1处的正X轴,角度在哪个象限中:

    +deltaX,+deltaY:0到90度。

    -deltaX,+deltaY:90到180度。

    -deltaX,-deltaY:180到270度(-180到-90度)。

    +deltaX,-deltaY:270到360度(-90到0度)。

    使用弧度的Python实现(由编辑我的答案的Eric Leschinski于2015年7月19日提供):from math import *

    def angle_trunc(a):

    while a < 0.0:

    a += pi * 2

    return a

    def getAngleBetweenPoints(x_orig, y_orig, x_landmark, y_landmark):

    deltaY = y_landmark - y_orig

    deltaX = x_landmark - x_orig

    return angle_trunc(atan2(deltaY, deltaX))

    angle = getAngleBetweenPoints(5, 2, 1,4)

    assert angle >= 0, "angle must be >= 0"

    angle = getAngleBetweenPoints(1, 1, 2, 1)

    assert angle == 0, "expecting angle to be 0"

    angle = getAngleBetweenPoints(2, 1, 1, 1)

    assert abs(pi - angle) <= 0.01, "expecting angle to be pi, it is: " + str(angle)

    angle = getAngleBetweenPoints(2, 1, 2, 3)

    assert abs(angle - pi/2) <= 0.01, "expecting angle to be pi/2, it is: " + str(angle)

    angle = getAngleBetweenPoints(2, 1, 2, 0)

    assert abs(angle - (pi+pi/2)) <= 0.01, "expecting angle to be pi+pi/2, it is: " + str(angle)

    angle = getAngleBetweenPoints(1, 1, 2, 2)

    assert abs(angle - (pi/4)) <= 0.01, "expecting angle to be pi/4, it is: " + str(angle)

    angle = getAngleBetweenPoints(-1, -1, -2, -2)

    assert abs(angle - (pi+pi/4)) <= 0.01, "expecting angle to be pi+pi/4, it is: " + str(angle)

    angle = getAngleBetweenPoints(-1, -1, -1, 2)

    assert abs(angle - (pi/2)) <= 0.01, "expecting angle to be pi/2, it is: " + str(angle)

    展开全文
  • 傅里叶级数(变换)对于很多理工学科是非常重要分析工具,比如电子学中,对电信号时域、频域变换。...三维空间中的向量可以表示为:式(1)上面黑体字 ex、ey ez分别表示三维笛卡尔正交坐标系下 x、y...

    傅里叶级数(变换)对于很多理工学科是非常重要的分析工具,比如电子学中,对电信

    号的时域、频域的变换。但傅里叶级数的公式还是有点复杂的,以致很多人记不住。本文就

    讲授一种有利于记忆的方法,以作科普。

    向量

    对于傅里叶级数,我从向量开始讲。有人可能会问,这两者似乎没什么太大的联系?别

    急,且看我下面的讲述。

    三维空间中的向量可以表示为:

    0b7f755725281e7cefde92f6c28d6d31.png

    式(1)

    上面黑体字的 ex、ey和 ez分别表示三维笛卡尔正交坐标系下 x、y和 z轴上的单位向量。只要学过高中数学,都知道向量的内积,也就是两个向量的点乘。向量的点乘有非常实际的

    物理意义,比如水平面上有一个滑块在力 F 的作用下,平移了位移 r,如果力的方向和位移r 不共线,那么力 F 对滑块所做的功为

    726830a787c410dd5929dc7b8e98f177.png
    8c1e52cb79b956ad758ff1453893cbdd.png

    图1 内积与做功

    图 1 内积与做功这里对内积作了简单的展开。那对三维空间中的任意两个向量的点乘,可表示为

    ced7a2985e9d618ede963548dfa623f8.png

    式(2)

    如果两个向量的内积为零,那么就说这两个向量是相互正交的,也就是相互垂直。那么

    如果(2)式中的 b向量是 x轴上单位向量,那么有

    d17829cc91d0cb382dc8b5e1d10d930d.png

    式(3)

    类似的,可以分别得到 ay和 az。

    接下来,把向量的维数推广到任意正整数 N,N可以大于 3乃至趋于无穷大。而 N维的笛卡尔正交坐标系的每一个单位向量表示为 e1,e2,e3,...eN,这样就把(1)式改写为

    58b33dcac2cf2ca252bb09159b518689.png

    式(4)

    则任意两个向量的内积为

    28d33206f392a1ce6bedfff508c332de.png

    式(5)

    而如果向量 b 是 N维笛卡尔坐标系上第 j个单位向量,那么根据(3)式的结论,可以求出向量 a 在第 j个坐标上的分量。

    b6946ac1a9546a61fbaaa71d4af329b3.png

    式(6)

    因为有

    15f3687d07da90a5fa2b24a3758d3684.png

    其中δij称为克罗内克符号

    70eed1bc9963db6a2a42c687bc32c660.png

    也就是说如果整数 i=j,δij=1;如果 i≠j,δij=0.

    粗略地讲,求积分就是求和的推广,因此可以把上述结论推广到函数,也就是说把函数看成是一个向量,并且这个向量的维数是无穷的。

    函数

    设有定义在实数轴区间[a,b]上的黎曼可积函数 f(x),g(x),a

    721bd991aff4b56f6b772af215dc9b19.png

    式(7)

    那么怎么把(7)式与向量的内积联系起来?

    a43109a18e1e7bb0dad462ef57a198a8.png

    图2 函数的黎曼分割

    在图 2中,将定义域[a,b]均匀等分为 N段,这样的分割称为黎曼分割。学过微积分的读者应该对上面这个图非常熟悉。函数 f(x)在定义域[a,b]上表示的曲线段,到 x轴[a,b]上的这一块不规则图形的面积可以近似为图中一块一块长方体面积的和,也就是

    cca17aeba43735d7f2c4c7618f7184ac.png

    式(8)

    设想一下,将 g(x)这段曲线以 x轴为中心轴旋转 90度,并作出如图 3所示的不规则柱状体。

    4660c6d799ff41adfa4acd260837b147.png

    图 3 函数内积的示意图

    这个柱状体的体积可以近似地表示为

    eca0c7272868fc1872010d50d40626db.png

    式(9)

    观察(9)式与(5)式,在形式上只相差一个Δx.当分割趋于无穷大时

    d7caf4ceb4d25f1b186b6c7fa6c774dd.png

    此时Δx可以用微分元 dx表示,即

    ae559215e3307f8644eb37415d6ab32b.png

    于是

    1b1800ed4ce3c60406664d568abc45ed.png

    式(10)

    这就是两个函数的内积的形象示意。

    如果

    5239475b43228e6c1e8f97ac4315f4a7.png

    则说函数 f(x)和 g(x)在定义域[a,b]上是相互正交的,表示为 f(x)⊥g(x).

    那么,这个"函数的内积"与傅里叶级数或傅里叶变换有什么关系呢?

    傅里叶级数(变换)

    对于一个基本周期为 2π的周期函数,其复数形式的傅里叶级数展开为

    f710ead02b64b0ec0216b403e22e3e5b.png

    式(11)

    系数的表达式为

    d9b4100a8c91158eef09c10eae245ef1.png

    式(12)

    其中 j是虚数单位,用 j表示虚数单位是电子学里的习惯,以与电流 i作区别。而 Fn是一个复数。

    可以发现,把函数视作向量后,(11)式与(6)式是很相似的,(12)式与(10)式很相似。是何道理呢?

    道理在于,既然把函数视作向量后,向量是可以用坐标表示的,这是(6)式的意义所在,而且这个坐标系最好是正交坐标系。那就要找出一个在定义域上的函数向量正交坐标系。

    设定义域[a,b]上有一组函数向量正交基

    245826470710410c84eb5ddf377ae72f.png

    式(13)

    这是一组无限维的向量基,这是与有限维空间坐标系的重要区别。则对于定义在[a,b]上的黎曼可积的实函数 f(x)可展开为

    87d384fabf2d6d61cbf3719cf52dafbd.png

    式(14)

    其中αi是一个实数。根据向量的运算关系,有

    28275fbcf3000009aadbce6672f5b1c2.png

    式(15)

    这样,(14)式中的系数可表示为

    7b2d039e75a9be3cf3f05b13a5537d08.png

    式(16)

    这时(14)式又和(11)式对应起来了,而(16)式又和(12)式对应起来了。当然,实函数与复函数的情况是有区别的。

    在复数形式的傅里叶级数中

    75dfb193d225771f73c3b72777de45c6.png

    式(17)

    正是定义域[0,2π]上的一组复正交坐标系。有

    8835313565981068d7f33e0c542bdd05.png

    上面(12)式与(16)式的区别在于,两个复函数求内积时,要对其中一个复函数求共轭。

    当函数为非周期函数时,傅里叶级数就扩展为傅里叶变换和傅里叶反变换。傅里叶变换

    中是将非周期信号看成是周期为无穷大的周期信号,因此替换(11)式中的 x为 2πt/T,对 T→∞求极限,而当 T→∞时,2π/T就变成了角频率的微分元。即

    19e9350217ef287341abe6cb94238d58.png

    而 nΔω可以写成ω,即ω=nΔω,n=ω/Δω于是改写(11)式

    102d294ed8f08ba8b368fb77d1025c47.png

    式(18)

    显然,上面这个式子是不收敛的。为了确保其收敛,在左右两边同除以周期 T,也就是要关于周期求平均。

    9cded8cce0d9cfc5ea2a93f6bc8d0005.png

    式(19)

    需要注意的是,此时因为周期 T是常数,所以Δω也是个常数,但ω是变数。所以可以改写(19式)为

    9a470a2399e4212135c2c9a5cfaed4f9.png

    式(20)

    现在开始对 T→∞求极限,求和变成积分

    d188ad29eb32e4a7034846b56de02731.png

    式(21)

    这就是非周期函数的傅里叶反变换。

    到了这一步我们要求出系数方程。对于一个特定的ω0,对(21)式两边求积分。

    ecf8215e052cce3dae4439e65de4df00.png

    式(22)

    对(22)式关于 T→∞求极限,并结合前面关于正交基的讨论,有

    678902edcbcc8f989110c40ee92af733.png

    进而

    7de5bab7ec0c56a2d680a533bce49517.png

    又因为ω0是任意的,所以有傅里叶变换

    d39aebd2285870305d0c1b0b74a2618c.png

    式(23)

    总结与补充

    透过现象看本质。一个通常的(只说常见的函数,此文不作展开)可积函数是无限维函

    数向量空间上的一个向量。既然是向量就要符合向量的运算法则,而傅里叶级数展开与傅里

    叶变换正是要寻找此向量空间中的一组正交坐标基,这组坐标基的每一个坐标分量也是一个

    函数——正弦函数或复指数函数。在使用傅里叶级数展开和傅里叶变换时,需要注意以下几

    点:

    ①如果向量所在的空间是刚性的,即一个向量在空间中作平移、旋转等运动时,向量不

    会被伸缩和扭曲。则向量的内积与坐标系无关。在(2)式中,是两个正交坐标系下的向量的内积,而(10)式中的函数向量内积是在仿射坐标系下的内积,这个内积与正交坐标系下求得的内积应该是相等的。也就是说对(11)式的函数作内积

    bf9d2ea13a5b864fd347856367eda7d6.png

    式(24)

    ②当函数是定义域为实数的复函数时,求函数内积的时候要对其中一个函数取共轭,如

    (24)式;

    ③在(24)式右侧既然是一个无穷级数,就要考虑收敛性。也就是说 n→±∞时,Fn→0。

    而如果(23)式成立,要满足

    de209825486801e30696e2eec768b457.png

    如果 f(t)代表的物理量是电压或电流,则意味着在一段足够长的时间里,能量也是有限的,

    否则不能用傅里叶变换。

    声明:原创文章。未经允许,不得转载!

    展开全文
  • 本文始发于个人公众号:TechFlow我们今天一起来看正交向量和正交矩阵概念,首先我们来复习一下向量相关。向量内积这个基本上是中学当中数学课本上概念,两个向量内积非常简单,我们直接看公式回顾一下:这里X...

    3a1c630faaa4bbcd158956f937227b5f.png

    本文始发于个人公众号:TechFlow

    我们今天一起来看正交向量和正交矩阵的概念,首先我们来复习一下向量相关。

    向量内积

    这个基本上是中学当中数学课本上的概念,两个向量的内积非常简单,我们直接看公式回顾一下:

    16382ea6513194c16a4fcba7270e41dc.png

    这里X和Y都是n维的向量,两个向量能够计算内积的前提是两个向量的维度一样。从上面公式可以看出来,两个向量的内积就等于两个向量对应各个维度的分量的乘积的和

    为了和矩阵乘法以及普通的乘法做区分,我们通常把两个向量的内积写成:

    0dc000cb9b62ca6cae63ebaa52922552.png

    这里有一个很重要的性质,对于一个向量而言,我们可以用欧几里得公式计算它的长度。进一步,我们可以用向量的长度以及向量之间的夹角来表示向量的内积,如下:

    4499670719afd3ef88229b58abd19e40.png

    其中的θ是x和y向量之间的夹角,对于三维及以下空间内的向量,这一点非常直观。对于高维度的向量,我们很难想象它的物理意义。不过没有关系,我们一样可以认为向量之间存在一个广义超空间内的一个夹角。在机器学习领域,我们通常用这个夹角来反应向量之间的相似度。两个向量越相似,那么它们之间的夹角应该越小,对应的cos余弦值应该越大。所以我们可以用两个向量之间的余弦值来反应它们之间的相似度。余弦值的计算就源于此。

    正交向量

    从上面的公式可以看出来,向量的内积等于两个向量长度乘上向量之间的夹角。对于非零向量而言,它们的长度都应该是大于0的。所以两个向量的内积的大小,就完全取决于向量之间的夹角θ。

    如果θ小于90°,那么

    ab82a03e8a6871a2efc207c802689f27.png

    ,那么内积为正值。如果θ大于90°,那么余弦值为负值。所以我们可以通过余弦值正负判断夹角是锐角还是钝角。既然说到夹角,自然就离不开一种特殊情况——垂直

    如果是在二维平面当中,两个向量夹角是90°,那么显然这两个向量垂直。在高维空间当中也是一样,不过我们一般不说垂直,而是会换一个词——正交。两个非零向量的内积为0,说明两个向量正交。

    正交向量组

    搞清楚了正交向量之后,正交向量组也就明确了。正交向量组是指一组两两正交且非零的向量组。

    如果n维的向量组:

    cc7b83982b95fa8d54eb4bd960144788.png

    两两正交,那么,它们一定线性无关。也就是说不存在一组不为零的系数λ,使得:

    7e0ddf28250298f4de82f6314fdfdf09.png

    这点很容易证明,由于向量组内向量均不为0,我们只需要在等式两边随便乘上一个向量即可,假设我们乘的是a1。由于它与其他向量两两正交,所以其他项全为0。如果要等式成立,那么必须要:

    6b79a6cbface2a9b2a7719791405efb3.png

    由于a1不为0,那么必然不为0,要使得等式成立,只能是λ1为0。

    规范正交基

    我们把正交向量组的概念和基的概念融合,如果向量组

    e6b2f3e9c9e6985d6c854ec9630336ef.png

    是向量空间V的一个基。如果它们之间彼此正交,那么就称它们是一组规范正交基

    对于向量a,我们可以很方便地求出它在规范正交基下各个维度的坐标:

    7411aa233989d982ed9cc93edbdedd6d.png

    也就是说向量a,在规范正交基下某一个维度的坐标, 等于它和整个维度的正交基向量的内积

    如果说我们已经知道向量空间V中的一组基是

    5ed2c470848185285c36306053d17efd.png

    ,我们怎么求V的规范正交基呢?

    这里要用到一个算法,叫做施密特算法。通过这个算法,我们可以通过向量空间的一组基来求出它的正交基

    这个算法很简单,我们可以直接写出它的公式:

    5249336ad1394ff79369dad05b3c0cdc.png

    我们随便取两个b向量乘一下就知道,b向量组之中两两正交。所以,我们只要将b向量组单位化一下,就可以求出对应的规范正交基了。

    即:

    8fcb287f338e02ee515a02b68f17c167.png

    这个算法虽然不难,但蛮重要。在机器学习领域中一些降维算法,很多都与施密特正交化方法有关。

    正交矩阵

    之前我们在介绍矩阵的时候,曾经说过,我们可以把一个矩阵看成是一个特定的向量组的结构。同样,我们也可以把一个规范正交基向量组看成是一个矩阵,那么这个矩阵就称为是正交矩阵。

    它拥有如下性质:

    08956d4a3ac17db0727f97ba37ff3b83.png

    其中I是单位矩阵,它的充要条件是矩阵A当中的每一列都是一个单位列向量,并且两两正交

    最后,我们看一下正交矩阵的性质。它的主要性质有三个:

    1. 如果A是正交矩阵,那么

    a375a615bac529bcbbd9d7250c4a422e.png

    ,也是正交矩阵,并且

    44ec7b2eb9aaab5e11e3893ea0f498a4.png

    2. 如果A和B都是正交矩阵,并且它们阶数一样,那么AB也是正交矩阵。

    3. 如果A是正交矩阵,向量y经过A变换之后行列式保持不变。

    这三个性质都很简单,我们通过正交矩阵的性质基本上都可以直接推导得到,或者是非常直观,和我们的直觉吻合。其实怎么推导不是重点,对于算法工程师而言,更重要的是理解这些概念的意思,并且将它与算法模型当中起到的功能联系起来,这才是最重要的事情。

    今天关于正交向量和矩阵的内容就到这里,希望大家学有收获,如果喜欢本文, 请点个关注或者转发支持作者吧~

    e919a2ce1ca9fe8fe634cf1b6f0bdc3f.png
    展开全文
  • 给个关注转发所列距离公式列表代码如下:闵可夫斯基距离(Minkowski Distance)欧氏距离(Euclidean Distance)曼哈顿距离(Manhattan Distance)切比雪夫距离(Chebyshev Distance)夹角余弦(Cosine)汉明距离(Hamming...

    给个关注和转发

    所列的距离公式列表和代码如下:

    • 闵可夫斯基距离(Minkowski Distance)
    • 欧氏距离(Euclidean Distance)
    • 曼哈顿距离(Manhattan Distance)
    • 切比雪夫距离(Chebyshev Distance)
    • 夹角余弦(Cosine)
    • 汉明距离(Hamming distance)
    • 杰卡德相似系数(Jaccard similarity coefficient)
    • 编辑距离(Edit Distance)
    • 标准化欧氏距离 (Standardized Euclidean distance )
    • 马氏距离(Mahalanobis Distance)
    • 皮尔逊相关系数(Pearson correlation)
    • 布雷柯蒂斯距离(Bray Curtis Distance)

    读者可根据自己需求有选择的学习。因使用矢量编程的方法,距离计算得到了较大的简化。

    1. 闵可夫斯基距离(Minkowski Distance)

    严格意义上,闵氏距离不是一种距离,而是一组距离的定义。

    (1)闵氏距离的定义:

    两个n维变量A(x11,x12,…,x1n)与 B(x21,x22,…,x2n)间的闵可夫斯基距离定义为:

    7509a24286892a2ba5d0af82f156b3b4.png

    其中p是一个变参数。

    当p=1时,就是曼哈顿距离

    当p=2时,就是欧氏距离

    当p→∞时,就是切比雪夫距离

    根据变参数的不同,闵氏距离可以表示一类的距离。

    (2)闵氏距离的缺点

    闵氏距离,包括曼哈顿距离、欧氏距离和切比雪夫距离都存在明显的缺点。

    举个例子:二维样本(身高,体重),其中身高范围是150~190,体重范围是50~60,有三个样本:a(180,50),b(190,50),c(180,60)。那么a与b之间的闵氏距离(无论是曼哈顿距离、欧氏距离或切比雪夫距离)等于a与c之间的闵氏距离,但是身高的10cm真的等价于体重的10kg么?因此用闵氏距离来衡量这些样本间的相似度很有问题。

    简单说来,闵氏距离的缺点主要有两个:

    (1)将各个分量的量纲(scale),也就是“单位”当作相同的看待了。

    (2)没有考虑各个分量的分布(期望,方差等)可能是不同的。

    python中的实现:

    # -*- coding:utf-8 -*-import numpy as npx=np.random.random(10)y=np.random.random(10)#方法一:根据公式求解,p=2d1=np.sqrt(np.sum(np.square(x-y)))print('d1:',d1)#方法二:根据scipy库求解from scipy.spatial.distance import pdistX=np.vstack([x,y])d2=pdist(X,'minkowski',p=2)[0]print('d2:',d2)

    2.欧氏距离(Euclidean Distance)

    欧氏距离(L2范数)是最易于理解的一种距离计算方法,源自欧氏空间中两点间的距离公式(如图1.9)。

    75eb59f6bb79f386bba5597263484d28.png

    (4) python实现欧式距离公式的:

    # -*- coding: utf-8 -*-from numpy import *vector1 = mat([1,2,3])vector2 = mat([4,5,6])print (sqrt((vector1-vector2)*((vector1-vector2).T)))import numpy as npx = np.random.random(10)y = np.random.random(10)# solution1dist1 = np.linalg.norm(x - y)# solution2dist2 = np.sqrt(np.sum(np.square(x - y)))print('x', x)print('y', y)print('dist1:', dist1)print('dist2:', dist2)# solution3from scipy.spatial.distance import pdistX=np.vstack([x,y])d2=pdist(X)[0]print('d2:',d2)

    3.曼哈顿距离(Manhattan Distance)

    从名字就可以猜出这种距离的计算方法了。想象你在曼哈顿要从一个十字路口开车到另外一个十字路口,驾驶距离是两点间的直线距离吗?显然不是,除非你能穿越大楼。实际驾驶距离就是这个“曼哈顿距离”(L1范数)。而这也是曼哈顿距离名称的来源,曼哈顿距离也称为城市街区距离(City Block distance)(如图1.10)。

    171f56194ec4c358cd00f244dbe095a5.png

    (3)python实现曼哈顿距离:

    # -*- coding: utf-8 -*-from numpy import *vector1 = mat([1,2,3])vector2 = mat([4,5,6])print (sum(abs(vector1-vector2)))import numpy as npx=np.random.random(10)y=np.random.random(10)#方法一:根据公式求解d1=np.sum(np.abs(x-y))print('d1:',d1)#方法二:根据scipy库求解from scipy.spatial.distance import pdistX=np.vstack([x,y])d2=pdist(X,'cityblock')[0]print('d2:',d2)

    4.切比雪夫距离(Chebyshev Distance)

    国际象棋玩过么?国王走一步能够移动到相邻的8个方格中的任意一个(如图1.11)。那么国王从格子(x1,y1)走到格子(x2,y2)最少需要多少步?自己走走试试。你会发现最少步数总是max(| x2-x1| , |y2-y1| ) 步。有一种类似的一种距离度量方法叫切比雪夫距离(L∞范数)。

    13dbea8d717567148324a81fab81e974.png

    (3) Python实现切比雪夫距离:

    # -*- coding: utf-8 -*-from numpy import *vector1 = mat([1,2,3])vector2 = mat([4,7,5])print (abs(vector1-vector2).max())import numpy as npx=np.random.random(10)y=np.random.random(10)#方法一:根据公式求解d1=np.max(np.abs(x-y))print('d1:',d1)#方法二:根据scipy库求解from scipy.spatial.distance import pdistX=np.vstack([x,y])d2=pdist(X,'chebyshev')[0]print('d2:',d2)

    5. 夹角余弦(Cosine)

    几何中夹角余弦可用来衡量两个向量方向的差异,机器学习中借用这一概念来衡量样本向量之间的差异(如图1.12)。

    76c8a730feabc65e904444e7c34660ea.png

    (1)在二维空间中向量A(x1,y1)与向量B(x2,y2)的夹角余弦公式:

    3c3a165479048db0422da56241e3d7a0.png

    (2) 两个n维样本点A (x11,x12,…,x1n)与 B(x21,x22,…,x2n)的夹角余弦

    类似的,对于两个n维样本点A(x11,x12,…,x1n)与 B(x21,x22,…,x2n),可以使用类似于夹角余弦的概念来衡量它们间的相似程度。

    ed6ff276d01a4aa57f0bb626047865ab.png

    夹角余弦取值范围为[-1,1]。夹角余弦越大表示两个向量的夹角越小,夹角余弦越小表示两向量的夹角越大。当两个向量的方向重合时夹角余弦取最大值1,当两个向量的方向完全相反夹角余弦取最小值-1。

    (3)python实现夹角余弦

    # -*- coding: utf-8 -*-import numpy as npfrom scipy.spatial.distance import pdist'''x: [0.05627679 0.80556938 0.48002662 0.24378563 0.75763754 0.15353348 0.54491664 0.1775408 0.50011986 0.55041845]y: [0.50068882 0.12200178 0.79041352 0.07332715 0.017892 0.57880032 0.56707591 0.48390753 0.631051 0.20035466]'''x = np.random.random(10)y = np.random.random(10)# solution1dist1 = 1 - np.dot(x, y) / (np.linalg.norm(x) * np.linalg.norm(y))# solution2dist2 = pdist(np.vstack([x, y]), 'cosine')[0]print('x', x)print('y', y)print('dist1:', dist1)print('dist2:', dist2)

    6. 汉明距离(Hamming distance)

    (1)汉明距离的定义

    两个等长字符串s1与s2之间的汉明距离定义为将其中一个变为另外一个所需要作的最小替换次数。例如字符串“1111”与“1001”之间的汉明距离为2。

    应用:信息编码(为了增强容错性,应使得编码间的最小汉明距离尽可能大)。

    (2) python实现汉明距离:

    # -*- coding: utf-8 -*-from numpy import *matV = mat([[1,1,0,1,0,1,0,0,1],[0,1,1,0,0,0,1,1,1]])smstr = nonzero(matV[0]-matV[1])print(shape(smstr[0])[0])import numpy as npfrom scipy.spatial.distance import pdistx=np.random.random(10)>0.5y=np.random.random(10)>0.5x=np.asarray(x,np.int32)y=np.asarray(y,np.int32)#方法一:根据公式求解d1=np.mean(x!=y)print('d1:', d1)#方法二:根据scipy库求解X=np.vstack([x,y])d2=pdist(X,'hamming')[0]print('d2:', d2)

    7. 杰卡德相似系数(Jaccard similarity coefficient)

    (1) 杰卡德相似系数

    两个集合A和B的交集元素在A,B的并集中所占的比例,称为两个集合的杰卡德相似系数,用符号J(A,B)表示。

    cdd40d5c0a98461910977cae0522e7b0.png

    杰卡德相似系数是衡量两个集合的相似度一种指标。

    (2) 杰卡德距离

    与杰卡德相似系数相反的概念是杰卡德距离(Jaccard distance)。杰卡德距离可用如下公式表示:

    af4a24c0816c13148addac19f668022d.png

    杰卡德距离用两个集合中不同元素占所有元素的比例来衡量两个集合的区分度。

    (3) 杰卡德相似系数与杰卡德距离的应用

    可将杰卡德相似系数用在衡量样本的相似度上。

    样本A与样本B是两个n维向量,而且所有维度的取值都是0或1。例如:A(0111)和B(1011)。我们将样本看成是一个集合,1表示集合包含该元素,0表示集合不包含该元素。

    P:样本A与B都是1的维度的个数

    q:样本A是1,样本B是0的维度的个数

    r:样本A是0,样本B是1的维度的个数

    s:样本A与B都是0的维度的个数

    那么样本A与B的杰卡德相似系数可以表示为:

    这里p+q+r可理解为A与B的并集的元素个数,而p是A与B的交集的元素个数。

    而样本A与B的杰卡德距离表示为:

    23bdcc6b295acb0132c15045076ac809.png

    (4) Python实现杰卡德距离:

    # -*- coding: utf-8 -*-from numpy import *from scipy.spatial.distance import pdist # 导入scipy距离公式matV = mat([[1,1,0,1,0,1,0,0,1],[0,1,1,0,0,0,1,1,1]])print ("dist.jaccard:
    展开全文
  • 哈喽,大家好,高考因为疫情原因推迟一个月进行,虽然延期一个月,但我们也不应该放松,要时刻准备着。下面我们来看一道数学高考模拟题,虽然是选择...这道题我们就可以以A点为圆心,ABAD分别为x轴和y轴建立直角坐...
  • 1、主惯性轴扭矩轴假设一个刚体绕任意方向的轴线旋转,此时一般会有一个使该旋转轴方向改变的力矩产生,但肯定会存在一些轴线使刚体绕其旋转时,不产生改变方向的力矩,这样的轴线即为刚体的主惯性轴,绕主惯性...
  • 6.3.5 平面向量数量积坐标表示教材分析本节课选自《普通高中课程标准数学教科书-必修第二册》(人教A版)第六章《平面向量及其应用》,本节课主要学习平面向量数量积坐标表示,模、夹角的坐标表示。前面我们学习了...
  • 6.3.5 平面向量数量积坐标表示教材分析与说明本节课选自《普通高中课程标准数学教科书-必修第二册》(人教A版)第六章《平面向量及其应用》,本节课主要学习平面向量数量积坐标表示,模、夹角的坐标表示。...
  • 图给出了二维的情况,其中向量b和向量c与x轴的夹角分别为B,C,从基本三角函数可得:b = (|b| cosB, |b| sinB) //|b|表示b的模就是b的长度c = (|c| cosC, |c| sinC)将上式代入点积等式,将它们的对应的分量相乘,再把...
  • 点积应用-求两个向量夹角

    万次阅读 2011-10-05 22:24:02
    之前,由点积求两条直线的夹角,只知道会用,不知道原量,今天看计算机图形学,才知道其原量,待记录如下: ...图给出了二维的情况,其中向量b和向量c与x轴的夹角分别为B,C,从基本三角函数可得:  b = (|b
  • 1. GetVelocity获得速度的vector 2. 使用RotationFromXVector和速度的vector得到世界坐标系里速度向量和世界坐标系X轴的夹角  虽然,RotationFromXVector返回的是... 速度vector和X轴的夹角。 3. GetActorRotation或
  • 在初中我们就学过很多种直线的表示一般式: ,其中 不能同时为零;斜截式: ,其中 是斜率(slope),表示...截距式: ,其中 分别表示直线与x轴和y轴的截距,也就是与x轴交点的横坐标与y轴交点的纵坐标;两点式: ,...
  • 向量点乘有两个定义两个定义似乎... A(x1, y1) B(x2, y2) |A| 为向量A的模 |B|为向量B的模 角AOB为两个向量的夹角 角AOX 为向量A和X轴的夹角 角BOX为向量B和X轴的夹角两个定义如下 定义1 A*B =x1*x2 + y1*y2 定义2...
  • //xyz1为第一个方向向量,xyz2为第二个方向向量(其中我要算的是一条直线水平X轴的夹角,xyz2就用了(1,0,0)) //最后返回的angle为对应角度的弧度制 (http://www.jsons.cn/angle/ :该链接可以验证算出来的...
  • 1.向量点乘公式推导几何解释 01.向量点乘(dot product)是其各个分量乘积的,公式: 用连加号写: 02.几何解释: ...点乘的结果是一个标量,等于向量大小与夹角的...假设ab都是二维向量,θ1是a与x轴的夹角...
  • 坡度与法向量

    2013-04-22 01:51:37
     如图所示,n为法向量,可以由水平的夹角坡向Z轴的夹角坡度来表示,其中坡向是0-2π的范围,而坡度是0-π/2的范围。一般我们不是这样描述坡度的,我们使用坡度在x轴上的坡度值y轴上的坡度值来描述,坡度破角...
  • 摘要:在平面解析几何中,直线方程有多种形式,在解决不同问题时,使用适当方程形式可以使问题...从直线一般式中可以知道以下信息:斜率:法向量:方向向量x轴截距为:,y轴上截距为:点斜式:点斜...
  • 习惯上,theta是向量和z轴的夹角。phi是向量在xy平面上的投影和x轴的夹角
  • 非0向量r(x,y,z)与x轴的夹角为a ...cosa=x/|r| 依次类推 这就向量r的方向余弦 当然还有一个投影的问题,向量在轴上的投影。 那么如何计算呢? 利用这3个性质可以计算投影。 这是...
  • 记得几年前,我的一个同事J需要做一个动画功能,大概的需求是 实现球面上一个点到另外一个点的动画。当时他遇到了难度,在...同事J的解决方案是,先计算出来A点圆心O的连线水平方向(与X轴平行)的夹角1,再计...
  • 用Python学《微积分B》(空间向量

    千次阅读 2017-10-17 09:45:33
    Math is fun对向量(vector)及其运算讲解的非常形象易懂 ,轻松的扫完这篇文章及其相关链接,对于向量也就了然于...  3)方向角与方向余弦 - 向量与坐标轴的夹角称为方向角 (cosα,cosβ,cosγ)=(x|r→|,y|r→|,z|r
  • 使用两个变量定义一个点到原点(极点)距离r,方向θ(与X轴正方向夹角),这里有个注意点左手坐标系中顺时针方向角度为正,而右手坐标系中逆时针方向角度为负。 右图θ可以使用arcsin或者arccos来计算 ii.主要...
  • 点积与叉乘运算与物理意义

    万次阅读 2016-07-05 13:50:01
    之前,由点积求两条直线的夹角,只知道会用,不知道原量,今天看计算机...图给出了二维的情况,其中向量b和向量c与x轴的夹角分别为B,C,从基本三角函数可得:  b = (|b| cosB, |b| sinB)  c = (|c| cosC, |c| sinC)
  • MPU6050模块是一个常用的六传感器模块,主要目的是获取以传感器为基点的欧拉角(偏航角、俯仰角、滚转角),可以理解为以传感器为中点,初始X正半轴与当前传感器前方所指的一个向量在XY平面的夹角,初始X正半轴与...
  • Uniyt简单手势识别

    2018-05-15 17:26:40
    此简单手势识别可以...与Y轴夹角小于45° :上与Y轴夹角大于135° :下与轴夹角小于45° :右与X轴夹角大于135° :左角度获取:根据公式:a * b = | a | * | b | * cosa计算a向量和b向量点积 Vector3.Dot(a...
  • 如题,已经知道圆心和两点,画出两点间的圆弧,思路,先分别求出原点到两点向量和x轴的夹角余弦值,然后求反余弦得出角度,这里要注意的是,求出的向量的夹角是按几何坐标系中定义的逆时针,然后用DrawArc()函数画...

空空如也

空空如也

1 2 3 4
收藏数 80
精华内容 32
关键字:

向量和x轴的夹角