【发布时间】: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] 设置为等于一。
【问题讨论】:
我有一个方阵 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] 设置为等于一。
【问题讨论】:
矩阵是:
>>> 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 == 0 是True 所需的行:
>>> row_sums == 0
array([False, False, True, False, True])
因此A[row_sums == 0, row_sums == 0] 选择所需的元素。
【讨论】: