【发布时间】:2017-03-27 09:17:33
【问题描述】:
我正在使用 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 脚本中产生什么。 -
stackoverflow.com/a/41677769/901925scipy.spatial.distance 具有成对距离函数。
标签: python numpy duplicates distance