【问题标题】:Creating a matrix with at most one value in every row and column创建一个矩阵,每行和每列最多包含一个值
【发布时间】:2021-03-05 01:00:32
【问题描述】:

从一个充满值的矩阵(见图),我想获得一个矩阵,每行和每列最多有一个值。如果有多个值,则应保留最大值,将另一个设置为 0。我知道我可以使用 np.max 和 np.argmax 做到这一点,但我想知道是否有一些聪明的方法可以做到这一点我不知道。

这是我目前的解决方案:

tmp = np.zeros_like(matrix)
for x in np.argmax(matrix, axis=0): # get max on x axis
    for y in np.argmax(matrix, axis=1): # get max on y axis
        tmp[x][y] = matrix[x][y]
matrix = tmp

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    稀疏结构可用于提高效率,但现在我发现每行和每列最多一个值与您当前的实现之间存在矛盾,每行可能留下一个以上的值/列。

    您需要一个顺序来优先于行而不是列,或者对所有矩阵值进行绝对排序。

    只是一个可以确定每行和每列最多一个条目的想法是,首先选择行的最大值,然后从这个中间矩阵中选择列的最大值:

    import numpy as np
    rows=5
    cols=5
    matrix=np.random.rand(rows, cols)
    
    rowmax=np.argmax(matrix, 1)
    rowmax_matrix=np.zeros((rows, cols))
    for ri, rm in enumerate(rowmax):
        rowmax_matrix[ri,rm]=matrix[ri, rm]
    
    colrowmax=np.argmax(rowmax_matrix, 0)
    colrowmax_matrix=np.zeros((rows, cols))
    for ci, cm in enumerate(colrowmax):
        colrowmax_matrix[cm, ci]=rowmax_matrix[cm, ci]
    

    这可能不是最终答案,但可能有助于精确制定所需的算法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-25
      • 1970-01-01
      • 2013-08-11
      • 2020-08-13
      • 1970-01-01
      • 1970-01-01
      • 2010-09-24
      相关资源
      最近更新 更多