Эффективный способ создания диагональной разреженной матрицы - PullRequest
6 голосов
/ 12 сентября 2010

У меня есть следующий код в Python с использованием Numpy:

p = np.diag(1.0 / np.array(x))

Как я могу преобразовать его, чтобы получить разреженную матрицу p2 с теми же значениями, что и p, не создавая сначала p?

Ответы [ 2 ]

8 голосов
/ 12 сентября 2010

Используйте scipy.sparse.spdiags (что очень много, и поначалу может сбить с толку), scipy.sparse.dia_matrix и / или scipy.sparse.lil_diags,(в зависимости от формата вы хотите, чтобы разреженная матрица в ...)

Например, используя spdiags:

import numpy as np
import scipy as sp
import scipy.sparse

x = np.arange(10)

# "0" here indicates the main diagonal...
# "y" will be a dia_matrix type of sparse array, by default
y = sp.sparse.spdiags(x, 0, x.size, x.size)
1 голос
/ 11 декабря 2010

Используя модуль scipy.sparse,

p = sparse.dia_matrix(1.0 / np.array(x), shape=(len(x), len(x)));
...