【发布时间】:2020-04-20 12:51:04
【问题描述】:
假设我们想用 scipy 解决一个线性求和分配,并且分配的成本可以从欧几里德距离构建。
因此,在m 工人W=[j_1, ..., j_m] 和n 任务T=[t_1, ..., t_n] 中,成本矩阵由下式给出
cost_matrix = np.array([
[np.linalg.norm(x - y) for x in W] for y in T
])
这看起来计算量很大,效率不高。有没有一种 numpy/scipy 方法可以更好更快地做到这一点?
工作示例:
import numpy as np
from scipy.optimize import linear_sum_assignment
np.random.seed(0)
# define tasks
t = np.random.rand(5)
# define workers
w = np.random.rand(3)
cost_matrix = np.array([[np.linalg.norm(x-y) for x in w] for y in t])
>>> linear_sum_assignment(cost_matrix)
(array([1, 2, 4]), array([2, 0, 1]))
【问题讨论】: