计算点列表中与邻居的最短距离

时间:2018-07-07 05:52:19

标签: python numpy

我有一个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'),对吗?

1 个答案:

答案 0 :(得分:0)

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

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

尽管它不像单线纸那样优雅。