给定n维空间中的两组点,一个映射如何从一个集合指向另一个集合,使得每个点只使用一次,并且总的欧氏距离这些点对是最小化的?最小化Python中两组点之间的总距离
例如,
import matplotlib.pyplot as plt
import numpy as np
# create six points in 2d space; the first three belong to set "A" and the
# second three belong to set "B"
x = [1, 2, 3, 1.8, 1.9, 3.4]
y = [2, 3, 1, 2.6, 3.4, 0.4]
colors = ['red'] * 3 + ['blue'] * 3
plt.scatter(x, y, c=colors)
plt.show()
因此,在上面的例子中,目标将是每个红色点为蓝色点映射,使得每个蓝色点仅使用一次并且总和点之间的距离最小化。
我碰到this question这有助于解决问题的第一部分 - 计算所有点对跨越使用scipy.spatial.distance.cdist()
功能组之间的距离。
从那里,我大概可以测试每行单个元素的每个排列,并找到最小值。
我想到的应用程序涉及三维空间中相当少数量的数据点,所以暴力方法可能会很好,但我想我会检查是否有人知道更高效或优雅的解决方案第一。
所以这个问题似乎是对算法,即语言无关? – moooeeeep
这两组永远是相同的大小? – moooeeeep
这个问题不是[线性和分配](http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.linear_sum_assignment.html)问题的一个实例吗? – Stelios