【问题标题】:Determining the average euclidean distance between neighbouring points in dataset确定数据集中相邻点之间的平均欧式距离
【发布时间】:2021-07-31 08:13:46
【问题描述】:

我想计算二维数据集(xCoords、yCoords)中的平均欧几里得距离,但仅限于相邻点之间。

举个例子:

xCoords = [[16.8742 10.7265 30.0538 10.4524 12.6483 15.5349 10.2094 28.6425 9.2882]]

yCoords = [[14.5835  6.0766 12.7006  4.3638  5.0318 14.2657  8.3131 15.8346 6.1746]]

我想找到点之间的欧几里得距离,但仅限于彼此相邻的点。我的任务是否有 numpy、scipy 或 sklearn 函数(或其他函数)?

编辑:

作为说明:

我想要什么:

我不想要的:

我不想计算每个数据点到所有其他数据点的欧几里得距离。

【问题讨论】:

  • 相邻点彼此是什么意思?
  • 抱歉,我已经编辑了我的帖子以使其更清晰。
  • 在您的第一张图片中,有什么排除将 [0.9, 0.45] 处的点与 [0.8, 0.2] 处的基点“相邻”的情况?说点是否相邻的明确标准是什么?
  • 这也是我努力想出的东西。例如。如果我对等距点的 2D 网格进行成像,确定每个单独点的相邻点将相对容易成像和实现。然而,这个想法必须以某种方式推广到上面的示例,具有任意分布。

标签: python algorithm numpy scipy euclidean-distance


【解决方案1】:

Sklearn 有 eucliedean_distances 函数:https://scikit-learn.org/stable/modules/generated/sklearn.metrics.pairwise.euclidean_distances.html

>>> from sklearn.metrics.pairwise import euclidean_distances
>>> X = [[0, 1], [1, 1]]
>>> # distance between rows of X
>>> euclidean_distances(X, X)
array([[0., 1.],
       [1., 0.]])
>>> # get distance to origin
>>> euclidean_distances(X, [[0, 0]])
array([[1.        ],
       [1.41421356]])

该函数返回一个矩阵,其中包含每对坐标之间的欧几里得距离,如果这不是您所需要的,您可以使用您想要获得这些“相邻距离”的规则过滤此矩阵。

或者您可能需要某种聚类算法(如 k-means),它会划分聚类中最近的点,然后得到每个聚类的平均距离。

【讨论】:

  • 如果您发现 k-means 可能对您有所帮助,以下是如何获取与最近集群的数据点的距离datascience.stackexchange.com/a/41125
  • 非常感谢!我会看看是否可以根据您的建议提出解决方案,但这绝对是可以解决的问题。如果您想知道我所说的“相邻点”是什么意思,我试图在上面对我原来帖子的回答中说清楚。
  • PhilE,关键是,据我所知,这些点并没有“正确的规则”,你知道我的意思吗?所以我只是想出一个想法,即你想要从最近点到彼此的距离(这就是 k-meand 所做的),这是一种无监督算法,试图找到最好的点组,然后让这些组你可以获得有趣的距离,例如与最近/远组的距离,组边界点之间的距离...希望这对您有所帮助!
  • 是的,这很有帮助!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-07
  • 2017-06-25
  • 2011-05-20
  • 1970-01-01
  • 2011-01-29
  • 1970-01-01
  • 2015-02-02
相关资源
最近更新 更多