Матрица:
>>> 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])
Мы хотим, чтобы были установлены все диагонали, соответствующие строкам с нулевой суммой 1. 1. 1007 *
Таким образом, работает следующее:
>>> 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]
выбирает необходимые элементы.