精华内容
下载资源
问答
  • 欧式距离计算公式

    万次阅读 多人点赞 2019-06-26 15:06:02
    欧式距离也称欧几里得距离,是最常见的距离度量,衡量的是多维空间中两个点之间的绝对距离。 也可以理解为:m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离)。在二维和三维空间中的欧氏...

    欧式距离也称欧几里得距离,是最常见的距离度量,衡量的是多维空间中两个点之间的绝对距离。

    也可以理解为:m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离)。在二维和三维空间中的欧氏距离就是两点之间的实际距离

    下面是具体的计算公式

                                                               

    展开全文
  • 矩阵向量中两两间欧式距离计算

    千次阅读 2019-07-03 13:04:59
    一般而言,我们常见的欧式距离计算公式如下: a,b 对应的是两组不同的向量 dist(a,b)=(a1−b1)2+(a2−b2)2+⋅⋅⋅(an−bn)2dist(a,b)=\sqrt{(a_1-b_1)^{2}+(a_2-b_2)^{2}+···(a_n-b_n)^{2}}dist(a,b)=(a1​−b1...

    目标:希望通过的矩阵运算就能得出矩阵向量中两两之间的欧式距离

    欧氏距离公式:

    • 一般而言,我们常见的欧式距离计算公式如下:

      • a,b 对应的是两组不同的向量
      • d i s t ( a , b ) = ( a 1 − b 1 ) 2 + ( a 2 − b 2 ) 2 + ⋅ ⋅ ⋅ ( a n − b n ) 2 dist(a,b)=\sqrt{(a_1-b_1)^{2}+(a_2-b_2)^{2}+···(a_n-b_n)^{2}} dist(a,b)=(a1b1)2+(a2b2)2+(anbn)2
    • 事实上对于上面的公式如果我们通过向量的角度来考虑,就会变成是下列形式:

      • a,b 对应的是两组不同的向量
      • d i s t ( a , b ) = d o t ( a , a ) − 2 ∗ d o t ( a , b ) + d o t ( b , b ) dist(a,b) = \sqrt{dot(a,a)-2*dot(a,b)+dot(b,b)} dist(a,b)=dot(a,a)2dot(a,b)+dot(b,b)

    假设有下列矩阵 A A A:

    • A = [ a 1 a 2 a 3 b 1 b 2 b 3 ] {A}= \left[{\begin{array}{}{a{_1}}&{a{_2}}&{a{_3}}\\{b{_1}}&{b{_2}}&{b{_3}}\end{array}}\right] A=[a1b1a2b2a3b3]

    • 为了凑出上面的公式:

      • 先计算出 d o t ( A , A ) dot(A,A) dot(A,A) -> A A T {AA^T} AAT

        • A ‾ = [ a 1 a 2 a 3 b 1 b 2 b 3 ] [ a 1 b 1 a 2 b 2 a 3 b 3 ] = [ ( a 1 ) 2 + ( a 1 ) 2 + ( a 1 ) 2 ( a 1 ) ( b 1 ) + ( a 2 ) ( b 2 ) + ( a 3 ) ( b 3 ) ( a 1 ) ( b 1 ) + ( a 2 ) ( b 2 ) + ( a 3 ) ( b 3 ) ( b 1 ) 2 + ( b 2 ) 2 + ( b 3 ) 2 ] \overline{A} = \left[{\begin{array}{}{a{_1}}&{a{_2}}&{a{_3}}\\{b{_1}}&{b{_2}}&{b{_3}}\end{array}}\right] \left[{\begin{array}{}{a{_1}}&{b{_1}} \\ {a{_2}}&{b{_2}} \\ {a{_3}}&{b{_3}} \end{array}}\right] = \left[{\begin{array}{}{(a{_1})^2+(a{_1})^2+(a{_1})^2}&{(a{_1})(b{_1})+(a{_2})(b{_2})+(a{_3})(b{_3})} \\{(a{_1})(b{_1})+(a{_2})(b{_2})+(a{_3})(b{_3})} & {(b{_1})^2+(b{_2})^2+(b{_3})^2} \end{array}}\right] A=[a1b1a2b2a3b3]a1a2a3b1b2b3=[(a1)2+(a1)2+(a1)2(a1)(b1)+(a2)(b2)+(a3)(b3)(a1)(b1)+(a2)(b2)+(a3)(b3)(b1)2+(b2)2+(b3)2]
      • A ‾ \overline{A} A对角线:

        • A ‾ . d i a g ( ) \overline{A}.diag() A.diag() = [ ( a 1 ) 2 + ( a 2 ) 2 + ( a 3 ) 2 ( b 1 ) 2 + ( b 2 ) 2 + ( b 3 ) 2 ] \left[{\begin{array}{}{(a{_1})^2+(a{_2})^2+(a{_3})^2} & {(b{_1})^2+(b{_2})^2+(b{_3})^2}\end{array}}\right] [(a1)2+(a2)2+(a3)2(b1)2+(b2)2+(b3)2]
      • 对对角线矩阵进行一些变换

        • A ‾ 1 \overline{A}{_1} A1 = [ ( a 1 ) 2 + ( a 2 ) 2 + ( a 3 ) 2 ( b 1 ) 2 + ( b 2 ) 2 + ( b 3 ) 2 ] T \left[{\begin{array}{}{(a{_1})^2+(a{_2})^2+(a{_3})^2} & {(b{_1})^2+(b{_2})^2+(b{_3})^2}\end{array}}\right]^T [(a1)2+(a2)2+(a3)2(b1)2+(b2)2+(b3)2]T [ 1 1 ] \left[{\begin{array}{}1 & 1\end{array}}\right] [11]
        • = [ ( a 1 ) 2 + ( a 2 ) 2 + ( a 3 ) 2 ( a 1 ) 2 + ( a 2 ) 2 + ( a 3 ) 2 ( b 1 ) 2 + ( b 2 ) 2 + ( b 3 ) 2 ( b 1 ) 2 + ( b 2 ) 2 + ( b 3 ) 2 ] \left[{\begin{array}{}{(a{_1})^2+(a{_2})^2+(a{_3})^2} & {(a{_1})^2+(a{_2})^2+(a{_3})^2} \\ {(b{_1})^2+(b{_2})^2+(b{_3})^2} & {(b{_1})^2+(b{_2})^2+(b{_3})^2} \end{array}}\right] [(a1)2+(a2)2+(a3)2(b1)2+(b2)2+(b3)2(a1)2+(a2)2+(a3)2(b1)2+(b2)2+(b3)2]
        • A ‾ 2 \overline{A}{_2} A2 = [ 1 1 ] T \left[{\begin{array}{}1 & 1\end{array}}\right]^T [11]T [ ( a 1 ) 2 + ( a 2 ) 2 + ( a 3 ) 2 ( b 1 ) 2 + ( b 2 ) 2 + ( b 3 ) 2 ] \left[{\begin{array}{}{(a{_1})^2+(a{_2})^2+(a{_3})^2} & {(b{_1})^2+(b{_2})^2+(b{_3})^2}\end{array}}\right] [(a1)2+(a2)2+(a3)2(b1)2+(b2)2+(b3)2]
        • = [ ( a 1 ) 2 + ( a 2 ) 2 + ( a 3 ) 2 ( b 1 ) 2 + ( b 2 ) 2 + ( b 3 ) 2 ( a 1 ) 2 + ( a 2 ) 2 + ( a 3 ) 2 ( b 1 ) 2 + ( b 2 ) 2 + ( b 3 ) 2 ] \left[{\begin{array}{}{(a{_1})^2+(a{_2})^2+(a{_3})^2} & {(b{_1})^2+(b{_2})^2+(b{_3})^2} \\ {(a{_1})^2+(a{_2})^2+(a{_3})^2} & {(b{_1})^2+(b{_2})^2+(b{_3})^2} \end{array}}\right] [(a1)2+(a2)2+(a3)2(a1)2+(a2)2+(a3)2(b1)2+(b2)2+(b3)2(b1)2+(b2)2+(b3)2]
      • 经过了上面的处理,我们就可以得出上述的公式了

        • d i s t ( A ) = A ‾ 1 + A ‾ 2 − 2 A ‾ dist(A) = {\overline{A}{_1}} + {\overline{A}{_2}} - {\overline{2A}} dist(A)=A1+A22A
    展开全文
  • 数据项A和B在坐标图中当做点时,两者相似度为距离dist(A,B),可通过欧氏距离(也叫欧几里得距离公式计算: 当做向量时,两者相似度为cosθ,可通过余弦公式计算: 假设||A||、||B||表示向量A、B的2范数,例如向量...
    来自:http://www.mtcnn.com
    
    >>> import numpy
    >>> vec1=[[1,1,1],[2,2,2]]
    >>> vec2=[[2,2,2],[1,1,1]]
    >>> vec1=numpy.array(vec1)
    >>> vec2=numpy.array(vec2)
    >>> vec1
    array([[1, 1, 1],
           [2, 2, 2]])
    >>> vec2
    array([[2, 2, 2],
           [1, 1, 1]])
    >>> dist = numpy.sqrt(numpy.sum(numpy.square(vec1 - vec2)))  
    >>> dist
    2.4494897427831779
    >>> numpy.linalg.norm(vec1-vec2)
    2.4494897427831779


    余弦相似度:

    >>> vec1
    array([[1, 1, 1],
           [2, 2, 2]])
    >>> vec2
    array([[2, 2, 2],
           [1, 1, 1]])
    >>> num=float(numpy.sum(vec1*vec2))
    >>> num
    12.0
    >>> denom=numpy.linalg.norm(vec1)*numpy.linalg.norm(vec2)
    >>> cos=num/denom
    >>> denom
    15.000000000000002
    >>> cos
    0.79999999999999993
    >>> sim=0.5+0.5*cos
    >>> sim
    0.89999999999999991
    



    两者相同的地方,就是在机器学习中都可以用来计算相似度,但是两者的含义有很大差别,以我的理解就是:

    前者是看成坐标系中两个  ,来计算两点之间的 距离 ;

    后者是看成坐标系中两个 向量 ,来计算两向量之间的 夹角 。

    前者因为是  ,所以一般指 位置 上的差别,即 距离 ;

    后者因为是 向量 ,所以一般指 方向 上的差别,即所成 夹角 。

    如下图所示:


    数据项A和B在坐标图中当做点时,两者相似度为距离dist(A,B),可通过欧氏距离(也叫欧几里得距离)公式计算:


    当做向量时,两者相似度为cosθ,可通过余弦公式计算:


    假设||A||、||B||表示向量A、B的2范数,例如向量[1,2,3]的2范数为:

    √(1²+2²+3²) =  √14 

    numpy中提供了范数的计算工具: linalg.norm()

    所以计算cosθ起来非常方便(假定A、B均为列向量):

    num = float(A.T * B) #若为行向量则 A * B.T
    denom = linalg.norm(A) * linalg.norm(B)
    cos = num / denom #余弦值
    sim = 0.5 + 0.5 * cos #归一化

    因为有了linalg.norm(),欧氏距离公式实现起来更为方便:

    dist = linalg.norm(A - B)
    sim = 1.0 / (1.0 + dist) #归一化

    关于归一化:

    因为余弦值的范围是 [-1,+1] ,相似度计算时一般需要把值归一化到 [0,1],一般通过如下方式:

    sim = 0.5 + 0.5 * cosθ 
    若在欧氏距离公式中,取值范围会很大,一般通过如下方式归一化:

    sim = 1 / (1 +  dist ( X,Y ))


    说完了原理,简单扯下实际意义,举个栗子吧:

    例如某T恤从100块降到了50块(A(100,50)),某西装从1000块降到了500块(B(1000,500))

    那么T恤和西装都是降价了50%,两者的价格变动趋势一致,余弦相似度为最大值,即两者有很高的 变化趋势相似度

    但是从商品价格本身的角度来说,两者相差了好几百块的差距,欧氏距离较大,即两者有较低的 价格相似度

    人工智能社区


    展开全文
  • 1.欧式距离(Euclidean Distance) ...【对于尺度无关的解释】如果向量中第一维元素的数量级是100,第二维的数量级是10,比如v1=(100,10),v2 = (500,40),则计算欧式距离 可见欧式距离会给与第一维度100权重,这会压制

    1.欧式距离(Euclidean Distance)

    欧式距离源自N维欧氏空间中两点 x 1 , x 2 x_1,x_2 x1,x2间的距离公式:
    在这里插入图片描述
    在这里插入图片描述

    2.标准化欧式距离(Standardized Euclidean distance)

    引入标准化欧式距离的原因是一个数据 x i x_i xi 的各个维度之间的尺度不一样。
    【对于尺度无关的解释】如果向量中第一维元素的数量级是100,第二维的数量级是10,比如v1=(100,10),v2 = (500,40),则计算欧式距离
    在这里插入图片描述
    可见欧式距离会给与第一维度100权重,这会压制第二维度的影响力。对所有维度分别进行处理,使得各个维度的数据分别满足标准正态分布:
    在这里插入图片描述
    u i u_i ui是该维度所有数据的均值, s i s_i si 是对应方差。
    然后在对 x ′ x′ x进行欧式距离:
    在这里插入图片描述

    3. 马氏距离

    马氏距离又称为数据的协方差距离,它是一种有效的计算两个未知样本集的相似度的方法。马氏距离的结果也是将数据投影到N(0,1)区间并求其欧式距离,与标准化欧氏距离不同的是它认为各个维度之间不是独立分布的,所以马氏距离考虑到各种特性之间的联系。
    在这里插入图片描述
    马氏距离可以通过协方差自动生成相应的权重,而使用逆则抵消掉这些权重。

    最典型的就是根据距离作判别问题,即假设有n个总体,计算某个样品X归属于哪一类的问题。此时虽然样品X离某个总体的欧氏距离最近,但是未必归属它,比如该总体的方差很小,说明需要非常近才能归为该类。对于这种情况,马氏距离比欧氏距离更适合作判别。

    4.余弦距离(余弦相似性)cosine similarity

    严格来讲余弦距离不是距离,而只是相似性。其他距离直接测量两个高维空间上的点的距离,如果距离为0则两个点“相同”;余弦的结果为在[0,1]之中,如果为 1,只能确定两者完全相关、完全相似。

    假设两用户同时对两件商品评分,向量分别为(3,3)和(5,5),这两位用户对两件商品的喜好其实是一样的,余弦距离此时为1,欧式距离给出的解显然没有余弦值直观。

    相对于标准化后的欧式距离,余弦距离少了将数据投影到一个均值为0的区间里这一步骤。对于点X和点Y,其余弦距离:
    在这里插入图片描述
    余弦距离在给文本分类的词袋模型中使用,例如给一篇文章一共出现过6000个词,则用一个6000维度的向量X表示这篇文章,每个维度代表各个字出现的数目;另外一篇文章也恰好只出现过这6000字,用向量Y表示该文章,则这两篇文章相似度可以用余弦距离来测量。

    优点:余弦距离根据向量方向来判断向量相似度,与向量各个维度的相对大小有关,不受各个维度直接数值影响。
    某种程度上,归一化后的欧氏距离和余弦相似性表征能力相同。

    5.汉明距离(Hammi)

    汉明距离是两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数。比如:
    1011101 与 1001001 为 2
    2143896 与 2233796 是 3
    可以把它看做将一个字符串变换成另外一个字符串所需要替换的字符个数。
    此外,汉明重量是字符串相对于同样长度的零字符串的汉明距离,如:
    11101 的汉明重量是 4。
    所以两者间的汉明距离等于它们汉明重量的差a-b

    6.曼哈顿距离 (Manhattan distance)

    曼哈顿距离的定义如下:
    在这里插入图片描述
    p是I的维度。当I为图像坐标时,曼哈顿距离即是x,y坐标距离之和。

    展开全文
  • 向量欧式距离: 向量点积: 向量的模: 向量归一化:向量除以模长,也就是 A / |A| 向量余弦相似度:也相当于向量归一化后的点积 A*B / |A| * |B| == A / |A| * B / |B| 向量余弦距离:用1减去余弦相似度 1 - cos(A...
  • 常用的向量距离公式

    万次阅读 2020-03-22 18:53:27
    1、欧式距离 2、曼哈顿距离 3、切比雪夫距离 4、马氏距离 1、欧式距离 欧几里得度量(educlidean metric),指在m维空间中两点之间的真实距离,或者向量的自然长度,即该点到原点的距离。 import numpy as ...
  • 距离向量欧式距离、曼哈顿距离等)

    千次阅读 多人点赞 2019-11-08 14:47:49
    欧式距离是最容易值观理解的距离度量方法。 2)曼哈顿距离 在曼哈顿街区要从一个十字路口开车到另一个十字路口,驾驶距离显然不是两点之前的直线距离。这个实际的驾驶距离就是"曼哈顿距离"。曼哈顿距离也称“城市...
  • OpenCV---基于欧几里得距离计算公式的图像二值化实现.具体的讲解见博客:http://blog.csdn.net/FreeApe/article/details/50409862
  • 您可以使用欧氏距离公式计算两个不同长度的向量之间的距离.对于不同维度的矢量,适用相同的原理.假设较低维度的向量也存在于较高维空间中.然后,您可以将较低维度向量中的所有缺少的组件设置为0,以使两个向量具有...
  • 欧几里得空间2.1 简介2.3 余弦距离3.应用4.代码 1.前言 近期热播的《长安十二夜》中大案牍术推荐出的不良帅、网易云音乐的每日歌曲推荐,这些生活中看似神乎其技的方法,用一个数公式便可简单实现。 2....
  • 欧氏距离计算

    千次阅读 2017-08-23 16:59:10
    二、精确的欧氏距离 def euclidean (x: Array[Float], y: Array[Float]) : Double= { var distance = 0.0 ; for (i 0 until x.length) { var temp = Math.pow((x(i) - y(i)), 2 ); distance += ...
  • 常用向量空间距离计算的几种方法

    千次阅读 2020-04-26 10:06:07
    1、欧式距离 2、余弦距离和余弦相似度 3、曼哈顿距离 …… 下面介绍一下常用的计算方法: 1、计算向量的余弦距离 2、使用scipy计算常用向量空间距离 3、使用sklearn计算常用向量距离 ...
  • # coding:utf-8 from scipy import spatial from functools import wraps ...结论:scipy计算性能更高 https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.cdist.html
  • 一、余弦距离 形式化描述: 余弦夹角也可以叫余弦相似度。几何中夹角余弦可用来衡量两个向量方向的差异,机器学习中借用这一概念来衡量样本向量之间的差异。 余弦取值范围为[-1,1]。求得两个向量的夹角,并得出...
  • 计算矩阵A与矩阵B的欧式距离

    千次阅读 2019-03-08 23:12:54
    计算矩阵A与矩阵B的欧式距离1. 从向量欧式距离谈起2. 从向量欧式距离扩展到矩阵的欧式距离 1. 从向量欧式距离谈起 向量x为1x3的行向量向量y为1x3的行向量,求向量x与向量y的欧式距离 x=(a11a12a13)x = \...
  • 本程序中,我以a[N]和 b[N]代表两个向量,其欧氏距离计算的串行C代码如下:CODE:dis = 0;for(int i = 0; i < N; i++){dis += (a[i] - b[i]) * (a[i - b[i]);}dis = sqrt(dis);其中dis表示两个向量的距离,sqrt...
  • 几种常见的距离计算公式

    万次阅读 2019-10-20 10:41:59
    我们常用的距离计算公式是欧几里得距离公式,但是有时候这种计算方式会存在一些缺陷,那么就需要另外的计算方法去加以补充,本文将介绍几种在机器学习中常用的计算距离。 在做很多研究问题时常常需要估算不同样本...
  • (主要原因是:在C中实现,向量化消除了循环所做的类型检查开销 . )(旁白:我的答案不包括这里的精度,但我认为同样的原则适用于效率的精确度 . )作为一个奖励,我重新使用IPython解释器,秘诀是使用 %prun 线魔术 ....
  • matlab中欧式距离计算函数。不同于传统2维图像中两点之间距离公式。可以在n维数据中进行计算
  • 向量的几种距离计算方法

    万次阅读 2019-06-19 19:16:32
    本文展示了4中距离计算方法:欧氏距离、曼哈顿距离、切比雪夫距离、夹角余弦距离。 另外:向量可以自己根据需要来构造,本文的比较杂乱,是由特定要求计算得来的 例如:A=[0.1,0.2,0.3,0.4,0.5],B=[0.005,0.006,0....
  • 欧氏距离是最易于理解的一种距离计算方法,源自欧氏空间中两点间的距离公式。 (1)二维平面上两点a(x1,y1)与b(x2,y2)间的欧氏距离: (2)三维空间两点a(x1,y1,z1)与b(x2,y2,z2)间的欧氏距离: (3)两个n维向量a...
  • 计算Python Numpy向量之间的欧氏距离

    万次阅读 2019-03-30 15:51:09
    计算Python Numpy向量之间的欧氏距离,已知a和b是两个Numpy向量,欧氏距离计算如下: # 给numpy起一个别名 np import numpy as np a = np.array([1, 1]) b = np.array([1, 6]) # 这个是直接用欧式距离公式直白写法...
  • 欧式距离计算

    千次阅读 2017-11-24 21:41:53
    高维向量相似性检索,有很多时间会花费在欧式距离计算上,做了下测试: 在我的mac上,不论怎么调jvm的SIMD选项(avx,mmx,sse等选项)或者打开enable aggregate opts,300维distance1平均每次耗时为380ns,distance4和...
  • 欧式距离:...# 欧式距离 distance_o = 0 sum = 0 for i in range(len(vec1)): a = vec1[i]-vec2[i] pow_a = math.pow(a, 2) sum += pow_a distance_o = math.sqrt(sum) print(d
  • 欧式距离及代码实现

    千次阅读 2019-05-20 18:08:54
    定义 欧几里得度量(euclidean metric)(也称欧氏距离)是一个通常采用的距离定义,指在m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离)。...计算公式 二维空间的公式 其中,为点...
  • #PS:要转载请注明出处,本人版权所有 #PS:这个只是 《 我自己 》理解,如果和你的 ...归一化就是将图像像素值(列如:[0,255])经过一定的计算,使其所有的像素值变换到某一个特定的区间(列如:[0,1]或者[...
  • tensorflow2计算两个向量的欧氏距离in python3
  • 距离的总结(欧氏距离

    千次阅读 2020-12-22 00:55:55
    首先要感谢各种距离 - 我只想做一个努力的人 - 博客频道 - CSDN.NEThttp://blog.csdn.net/shiwei408/article/details/7602324在做分类时常常需要估算不同...采用什么样的方法计算距离是很讲究,甚至关系到分类的正确...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,055
精华内容 3,622
关键字:

向量欧式距离计算公式