【问题标题】:Total Euclidian length of a vector向量的总欧几里得长度
【发布时间】:2021-03-07 07:56:45
【问题描述】:

给定一组向量点,计算总欧几里得长度(所有点之间的欧几里得数之和)的有效方法是什么。我想:

from scipy.spatial.distance import cdist
import numpy as np
a = np.array([[1, 1], [2, 3], [4, 4]])
length = np.diag(cdist(a, a), 1).sum()

还有什么更优雅的吗?

【问题讨论】:

  • 你是指总向量长度,还是所有点之间的距离?对于后者,您将计算一个距离矩阵,将下三角形或上三角形设置为零并将其余部分相加。
  • 向量总长度 Euc(p2 - p1) + Euc(p3 - p2)

标签: python numpy math euclidean-distance


【解决方案1】:

使用pdist,仅原生保留上三角

from scipy.spatial.distance import pdist
import numpy as np
a = np.array([[1, 1], [2, 3], [4, 4]])
length = pdist(a).sum()

【讨论】:

  • 抱歉评论中的混淆,总共 3 点向量长度为​​:Euc(p2 - p1) + Euc(p3 - p2) 没有 Euc(p3 - p1) 所以三角形将包含更多项目
【解决方案2】:

如果Euc(p2-p1)+Euc(p3-p2) 是您所追求的,那么您的方法是不正确的。您正在寻找:

length = np.sqrt( ((a[1:]-a[:-1])**2).sum(-1)).sum()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    • 2014-05-31
    • 2020-06-26
    • 2018-04-20
    • 2018-02-10
    • 2013-03-02
    相关资源
    最近更新 更多