python - 根据距离和出现频率选择一个项目(从一组项目中)

标签 python algorithm

存在一组点(或项目,无关紧要)。每点a与集合中的其他点有特定距离。可以通过函数 retrieve_dist(a, b) 检索距离。 .

这个问题是关于(在 Python 中)编程一种算法,从这组点中选择一个点,并进行替换。选取点:

i) 必须与所有已选择的点保持最大可能的距离,同时遵守 (ii) 中的要求

ii) 样本中已选点出现的次数在此计算中必须具有权重。 IE。应该对更频繁选择的点进行更重的权衡。

例如想象ab已经被选中(分别为 100 次和 10 次)。然后当要选择下一个点时,它与a的距离比它与 b 的距离更重要, 符合 a 的出现频率在已经选择的样本中。


我可以尝试什么:

如果不考虑权重/频率,这将很容易实现。我可以这样做:

distances = defaultdict(int)
for new_point in set_of_points:
    for already_selected_point in selected_points:
        distances[new_point] += retrieve_dist(new_point, already_selected_point)

然后我会排序 distances.items()通过每个元组中的第二个条目,并获得所需的项目进行选择。

但是,当已经选择的点的频率开始起作用时,我似乎无法解决这个问题。

有专家帮忙吗?提前致谢。

最佳答案

您的问题的解决方案是将 selected_points 设为 list 而不是 set。在这种情况下,每个新点都会与 ab(以及所有其他点)进行比较,次数与它们已经找到的次数一样多。

如果每个点通常被多次找到,则可以使用 dict 来提高性能,键是点,值是每个点被选择的次数.在那种情况下,我认为您的算法将是

distances = defaultdict(int)

for new_point in set_of_points:
    for already_selected_point, occurances in selected_points.items():
        distances[new_point] += occurances * retrieve_dist(new_point, already_selected_point)

关于python - 根据距离和出现频率选择一个项目(从一组项目中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55766207/

相关文章:

python - 类和 while 循环?

python - 无法返回 http.client getresponse() 对象

python - 如何从另一个 python 文件导入列表

c - 我需要一个用于定点数学库的快速 96 位对 64 位特定除法算法

algorithm - 检查图中的顶点是否属于循环

c# - 如何执行随机扩展?

string - 在多个查询中按字典顺序比较字符串

python - AttributeError: 'module' object has no attribute 'HOUGH_GRADIENT' , cv.HOUGH_GRADIENT 没有解决这个问题

Python Beautiful Soup 'NavigableString' 对象没有属性 'get_text'

c++ - 用迭代法寻找区域最大元素