В матрице, имеющей строку нулей, как заменить соответствующий диагональный элемент матрицы на единицу? - PullRequest
1 голос
/ 28 января 2020

У меня есть квадратная матрица A, значения которой равны нулю или единице и которая содержит один или несколько рядов нулей. Для каждого ряда нулей I w sh заменит соответствующий диагональный элемент 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 - все нули. I sh, чтобы установить A [3,3] и A [5,5] равными единице.

1 Ответ

1 голос
/ 28 января 2020

Матрица:

>>> 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] выбирает необходимые элементы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...