需要加快python中numpy数组的操作 一些代码时间备注

问题描述

我正在通过将 Cplex 作为库导入 Python 来求解整数编程模型。假设优化问题具有以下形式的约束 (Ax = b)x0+x1+x1+x3 = 1

此约束中 x 变量的索引为 0、1、1 和 3。它们存储在一个列表中:indices=[0,1,3] 这些变量的系数也存储在另一个列表coeff = [1,1]

Cplex 不能接受重复的索引,所以约束应该是这样的:

x0+2x1+x3 = 1

所以这两个列表应该像这样更新:

indices=[0,3]
 coeff = [1,2,1]

我有这个函数,它将索引和系数作为两个参数,并为我提供操作列表:

def manipulate(indices,coeff):
    u = np.unique(indices)
    sums  = { ui:np.sum([  coeff[c[0]] for c in np.argwhere(indices == ui) ]) for     ui in u }
    return list(sums.keys()),list(sums.values())

因此,manipulate([0,3],[1,1]) 返回 ([0,1])

我的问题是当我有这么多变量时,列表的长度可能是一百万,而我有数百万个这样的约束。当我使用 cplex 解决我的优化问题时,程序变得非常慢。我跟踪了每个函数所花费的时间,并意识到我的代码中最耗时的部分是这些计算,我猜这是因为使用了 numpy。我需要让这个函数更有效率,希望能减少执行时间。你能和我分享关于如何改变函数操作的任何想法和建议吗?

非常感谢,

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)