我有两个矩阵,我称它们为ones_matrix和zero_matrix
我需要创建一个新列表,该列表是此矩阵中最好的20行的总和,例如从第一行开始的10行和从第二行开始的10行,其中总和列表中的最小元素最大。
因此,这是贪婪的alghorhytm,我在其中从矩阵中选择最佳行来添加每个步骤。对于onesMatrix 10次,对zero_matrix 10次,对ones_matrix 10次,还排除了行的重复。
每次,我们都需要添加以前未添加的内容。 我的输入是两个仅包含1和0的64 x 128矩阵。
所以我的答案不能大于20,因为我要对20行用零和1求和,而20行仅包含1的行之和是64 * [20],且元素最少-20。 这是我的代码:
ignored=set()
res=np.zeros(128)
for i in range(10):
j=best(res,ones_matrix,ignored)
res=res+ones_matrix[j]
ignored.add(j)
j = best(res, zero_matrix,ignored)
res = res + zero_matrix[j]
ignored.add(j)
def best(res,matrix,ignored):
for i in range(len(matrix)):
matrix[i]=matrix[i]+res
m=min(matrix[0])
index=0
for i in range(len(matrix)):
if (min(matrix[i])>=m and i not in ignored):
index=i
m=min(matrix[i])
print(index)
return index
这些矩阵仅包含零和零,因此新行中的max元素不能大于20(因为我要添加20行,其中包含零和零)。但是当我使用
print(min(res))
我正在获得巨大价值,例如44266.0 我该如何工作?
最佳行是最小元素最大的行。