【问题标题】:Calculate shortest distances to their neighbours in a list of points在点列表中计算到其邻居的最短距离
【发布时间】:2018-07-07 14:53:59
【问题描述】:

我有一个 4 维数据集,比如 X。它恰好是 iris 数据集。我从这个集合中形成了一个包含 10 个数据点的子列表,称为 mu。对于这 10 个数据点中的每一个,我将计算以 mu 为单位的点到其最近邻居的 10 个最小平方距离的总和。这里最近的邻居可能包括来自原始数据集的数据点。 我如何达到同样的效果?

我想我可以使用这样的东西 -

(np.array([min([np.linalg.norm(x-c)**2 for x in X]) for c in mu]))

但是这里的“x”不会排除正在考虑的点(“c”),不是吗?

【问题讨论】:

标签: python numpy


【解决方案1】:

如果可以安全地假设您的点是唯一的(这样您将永远不会有两个点完全重叠,您可以从列表理解中过滤掉相等的点:

np.array([min([np.linalg.norm(x-c)**2 for x in X if not np.array_equal(x, c)]) for c in mu]

然而,作为一个单行,这有点太长了,不容易阅读。因此,我建议以符合 PEP-8 的方式重写:

res = np.empty(len(mu)) # allocate space for result
for i, c in enumerate(mu):
    res[i] = min([np.linalg.norm(x-c)**2 
                  for x in X if not np.array_equal(x, c)])

尽管它不像单线那么优雅。

【讨论】:

    猜你喜欢
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 2018-12-20
    相关资源
    最近更新 更多