当边界条件是周期性的时,检查两点之间的欧氏距离的最佳方法是什么?我已经尝试了最小距离和(距离 - 距离),但我认为由于我构建程序的方式,这给出了奇怪的输出。我希望有另一个好方法来解决这个问题,我可以采用而不是重新评估函数的其余部分。
这是Python的顺便说一句。目前正在使用numpy.linalg.norm查找欧几里德距离,尽管有SciPy的pdist例程可以执行我可能使用的相同的操作。
答案 0 :(得分:3)
您应该在每个维度上单独检查dx和range-dx之间的较小值。
def distance(p1, p2):
total = 0
for i, (a, b) in enumerate(zip(p1, p2)):
delta = abs(b - a)
if delta > dimension[i] - delta:
delta = dimension[i] - delta
total += delta ** 2
return total ** 0.5