在给定索引约束的情况下找到多个数组的最大总和的最佳方法

时间:2018-01-12 19:33:54

标签: python pandas optimization

假设我有3个排序的数组,每个数组长度为4,我想从每个数组中选择一个索引,使得索引的总和等于4.如何在不测试所有可能选择的情况下找到最大可能总和?

例如,我有以下数组

1 : [0,0,0,8]
2 : [1,4,5,6]
3 : [1,5,5,5]

Then the solution would be 3,0,1. Because 3 + 0 + 1 = 4 and 8 + 1 + 5 is 
the maximum combination where the sum of the indexes are 4.

我需要一个可以推广到n个大小为m的数组的解决方案,其中索引的总和可以等于任何值。

例如,可以要求用1000个大小为1000的数组来解决这个问题,其中索引的总和是2000.

如果某个地方有一个python包,请告诉我。

1 个答案:

答案 0 :(得分:1)

这将实现它,不确定速度是否符合您的要求

df1=pd.DataFrame([[0,0,0,8],[1,4,5,6],[1,5,5,5]])
import functools    
df=pd.DataFrame(list(itertools.product([0,1,2,3],[0,1,2,3],[0,1,2,3])))
df=df.loc[df.sum(1)<=4,:]
df.index=df.apply(tuple,1)
df.apply(lambda x : df1.lookup(df.columns.tolist(),list(x.name)),1).sum(1).idxmax()


Out[751]: (3, 0, 1)

df.apply(lambda x : df1.lookup(df.columns.tolist(),list(x.name)),1).sum(1).max()
Out[752]: 14