Набор разреженных матриц Python, равный 1 - PullRequest
0 голосов
/ 15 октября 2018

Я хотел бы установить диагональные элементы разреженной матрицы (в Python) равными 1, если сумма элементов строки равна 0. Другими словами, я хотел бы установить A_ii = 1, если sum_j A_ij =0. Кто-нибудь знает способ сделать это без итерации по строке, так как моя матрица очень большая?

Заранее спасибо, бест

1 Ответ

0 голосов
/ 15 октября 2018

Использование числовых массивов:

import numpy as np

# example matrix
A = np.array([[-1, 1, 0],
              [2, 0, -2],
              [0, 0, 3]])

i = (A.sum(axis=1) == 0)
A[i, i] = 1

# array([[1, 1, 0],
#        [2, 1, -2],
#        [0, 0, 3]])

Редактировать : для разреженной матрицы вы в основном делаете то же, что и выше.Разница в том, что A.sum(1) теперь имеет форму (N, 1), а не (N,), как для массива numpy, поэтому мы должны сгладить его.

# import scipy.sparse as sp
# A = sp.csr_matrix(A)  # I suppose that your matrix is in csr format
i = np.asarray(A.sum(axis=1) == 0).ravel()
A[i, i] = 1
...