我有一个方阵A,其值为零或一,并且包含一或多个零行。对于每行零,我希望将A的对应对角线项替换为1。
例如,假设
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。
矩阵为:
>>> 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和行的所有对角线设置为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]
选择所需的元素。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句