编辑:TLDR;如何在np数组中找到32对索引(i,j),使所有i和所有j都不同,并将A[i,j]求和得尽可能大?~感谢您的澄清
我对编程真的很陌生
假设我有一个566x566的np数组
我必须找到32个最高值,而不重复以前找到的值的行或列。 之后,我必须提取值的索引以回溯相应的特征
我尝试用pandas和numpy来实现这一点,方法是找到所有列的最大值,然后提取这些列的索引,然后丢弃行和列以构建更小的矩阵。然后用同样的方法在较小的矩阵上重复。但不知何故,它总是失败,因为有些函数是不合适的,或者有一个愚蠢的错误等等
我试着用pandas/numpy来实现它,因为它可以给我最简洁的代码,但老实说,每种方法都非常受欢迎。将原始数组切片到列表中并在其中查找最高值会导致内存使用过多
''Python 对于pd_余弦中的n: maxRow=pd_cosine.max(axis=n)#等,但下面的代码不起作用。。。 '''
我在R中发现了一个类似的问题,如果有帮助的话,答案是:Algorithm to extract elements with largest sum from a matrix without repeating rows or columns?
在这种特殊情况下(矩阵为正方形),可以使用
scipy.optimize.linear_sum_assignment
(reference)如果您将行视为任务,将列视为工作者,将矩阵条目视为成本,
linear_sum_assignment
尝试将任务分配给工作者,以使成本最小化(或者,在我们的例子中,最大化)如果性能不是至关重要的,您可以简单地使用此算法并选择具有最大和的32个元素。然而,对于较大的矩阵,这可能是不可行的
下面是它的样子:
然后
row_ind_32
和col_ind_32
是对32个最大元素具有不同行和列索引的数组values_ind_32
包含A
的相应条目编辑:如果
A
也是非方形的,它也可以工作相关问题 更多 >
编程相关推荐