在点列表中计算到其邻居的最短距离



我有一个4维数据集,比如X。这恰好是鸢尾花数据集。我从这个集合中形成了一个包含 10 个数据点的子列表,称为 mu。对于这 10 个数据点中的每一个,我将计算 mu 中点到最近邻居的 10 个最小平方距离的总和。此处最近的邻居可能包括来自原始数据集的数据点。 我该如何实现相同的目标?

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

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

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

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

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)])

即使它不像单行字那么优雅。

最新更新