首页 > 解决方案 > 在具有一行零的矩阵中,如何用一个替换矩阵的相应对角线条目?

问题描述

我有一个方阵 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] 设置为 1。

标签: pythonnumpymatrix

解决方案


矩阵是:

>>> 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]选择所需的元素。


推荐阅读