gpt4 book ai didi

python - 给定 python 中的阈值,有效地删除彼此接近的数组

转载 作者:太空宇宙 更新时间:2023-11-03 10:54:51 24 4
gpt4 key购买 nike

我正在使用 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。

最佳答案

通用方法可能是:

def filter_quadratic(data,condition):
result = []
for element in data:
if all(condition(element,other) for other in result):
result.append(element)
return result

这是一个具有条件的通用高阶过滤器。仅当列表*中已有的所有元素的条件都满足时,才会添加该元素。

现在我们仍然需要定义条件:

def the_condition(xs,ys):
# working with squares, 2.5e-05 is 0.005*0.005
return sum((x-y)*(x-y) for x,y in zip(xs,ys)) > 2.5e-05

这给出:

>>> filter_quadratic([[ 5.024,  1.559,  0.281], [ 6.198,  4.827,  1.653], [ 6.199,  4.828,  1.653]],the_condition)
[[5.024, 1.559, 0.281], [6.198, 4.827, 1.653]]

该算法的运行时间为 O(n2),其中 n 是您为函数提供的元素数量。然而,您可以使用 k-d 树使其更高效,但这需要一些更高级的数据结构。

关于python - 给定 python 中的阈值,有效地删除彼此接近的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43035503/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com