我是用Python来完成这项工作的,很客观地说,我想找到一种“Pythonic”的方法来从一个数组中删除那些彼此之间距离小于阈值的“重复”项。例如,给定以下数组:
[[ 5.024, 1.559, 0.281], [ 6.198, 4.827, 1.653], [ 6.199, 4.828, 1.653]]
请注意,
[6.198, 4.827, 1.653]
和[6.199, 4.828, 1.653]
非常接近,它们的欧几里得距离为0.0014
,因此它们几乎是“重复”的。我希望我的最终输出只有:[[ 5.024, 1.559, 0.281], [ 6.198, 4.827, 1.653]]
我现在拥有的算法是:
to_delete = [];
for i in unique_cluster_centers:
for ii in unique_cluster_centers:
if i == ii:
pass;
elif np.linalg.norm(np.array(i) - np.array(ii)) <= self.tolerance:
to_delete.append(ii);
break;
for i in to_delete:
try:
uniques.remove(i);
except:
pass;
但是它真的很慢,我想知道一些更快和“Pythonic”的解决方法。我的容忍度为0.0001。
np.array(i)
应该是什么意思?我认为它并不是在真正的 Python/numpy 脚本中所产生的结果。 - hpaulj