我有一个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'),对吗?
答案 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)])
尽管它不像单线纸那样优雅。