我有一组带有x和y坐标的200个点。我需要制作20个批次,这样批次中的每个点都是" n"距离其他19厘米,即一批中没有两个点在" n"另一个的厘米。一个点应该只属于一个批次。我该如何解决这个问题?
我已经使用树来绘制分支,这样只有在新的节点是" n"远离分支中的所有其他节点。这有效,但速度极慢。
Input.csv:| Point Name || X坐标|| Y坐标| 输出:批次列表
答案 0 :(得分:0)
根据我的猜测,你应该这样做:
import math
from random import randrange
test_data = {(randrange(0, 1000), randrange(0, 1000)) for _ in range(200)}
inf = float("inf")
def distance(p1, p2):
return math.hypot(p2[0] - p1[0], p2[1] - p1[1])
def batch(data: set, min_distance, max_distance=inf, count=20, remove=True):
result = [next(iter(data))]
candidates = {t for t in data if max_distance > distance(result[0], t) > min_distance}
while len(result) < count and len(candidates) > 0:
result.append(candidates.pop())
candidates = {t for t in data if all(max_distance > distance(p, t) > min_distance for p in result)}
if len(result)<count:
raise ValueError("Not enough values in data that have great enough distances between each other")
if remove:
data.difference_update(result)
return result
print(len(test_data))
i = 1
while test_data:
print(i,batch(test_data, 10))
i+=1