【问题标题】:In a matrix having a row of zeros, how do I replace the corresponding diagonal entry of the matrix with a one?在具有一行零的矩阵中,如何用一个替换矩阵的相应对角线条目?
【发布时间】:2020-01-28 15:41:05
【问题描述】:

我有一个方阵 A,其值为 0 或 1,并且包含一行或多行 零。对于每一行零,我希望用一个替换 A 的相应对角线条目。

例如,假设

A=np.array([[0,1,1,0,1],[0,0,1,1,1],[0,0,0,0,0],[0,1,0,0,0],[0,0,0,0,0]])

第 3 行和第 5 行全为零。我希望将 A[3,3] 和 A[5,5] 设置为等于一。

【问题讨论】:

    标签: python numpy matrix


    【解决方案1】:

    矩阵是:

    >>> A
    array([[0, 1, 1, 0, 1],
           [0, 0, 1, 1, 1],
           [0, 0, 0, 0, 0],
           [0, 1, 0, 0, 0],
           [0, 0, 0, 0, 0]])
    

    我们可以找出所有行的总和:

    >>> A.sum(axis=1)
    array([3, 3, 0, 1, 0])
    

    我们希望所有与 0-sum 行对应的对角线都设置为 1。

    因此,以下工作:

    >>> row_sums = A.sum(axis=1)
    >>> A[row_sums == 0, row_sums == 0] = 1
    >>> A
    array([[0, 1, 1, 0, 1],
           [0, 0, 1, 1, 1],
           [0, 0, 1, 0, 0],
           [0, 1, 0, 0, 0],
           [0, 0, 0, 0, 1]])
    

    请注意,这是因为row_sums == 0True 所需的行:

    >>> row_sums == 0
    array([False, False,  True, False,  True])
    

    因此A[row_sums == 0, row_sums == 0] 选择所需的元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-10
      • 2011-08-16
      • 1970-01-01
      • 1970-01-01
      • 2019-04-21
      相关资源
      最近更新 更多