Як перетворити numpy.matrix або масив у scipy розріджену матрицю


83

Для розрідженої матриці SciPy можна використовувати todense()або toarray()перетворити на матрицю чи масив NumPy. Які функції виконувати обернено?

Я шукав, але не уявляв, які ключові слова повинні бути правильним.

Відповіді:


122

Ви можете передавати масив чи матрицю numpy як аргумент при ініціалізації розрідженої матриці. Наприклад, для матриці КСВ ви можете зробити наступне.

>>> import numpy as np
>>> from scipy import sparse
>>> A = np.array([[1,2,0],[0,0,3],[1,0,4]])
>>> B = np.matrix([[1,2,0],[0,0,3],[1,0,4]])

>>> A
array([[1, 2, 0],
       [0, 0, 3],
       [1, 0, 4]])

>>> sA = sparse.csr_matrix(A)   # Here's the initialization of the sparse matrix.
>>> sB = sparse.csr_matrix(B)

>>> sA
<3x3 sparse matrix of type '<type 'numpy.int32'>'
        with 5 stored elements in Compressed Sparse Row format>

>>> print sA
  (0, 0)        1
  (0, 1)        2
  (1, 2)        3
  (2, 0)        1
  (2, 2)        4

2
А як щодо масивів вищих розмірів?
Nirmal

Я отримую помилку пам’яті для своєї матриці (~ 25 000x25 000). Крім того, споживання пам’яті стрибає як божевільний, коли я подаю заявкуsparse.csr_matrix
Мартін Тома,

22

Існує кілька розріджених матричних класів у scipy.

bsr_matrix (arg1 [, фігура, dtype, копія, розмір блоку]) Блок матриці
розрідженого рядка coo_matrix (arg1 [, фігура, dtype, копія]) Розріджена матриця у форматі COOrdinate.
csc_matrix (arg1 [, shape, dtype, copy])
Стиснута розріджена матриця стовпця csr_matrix (arg1 [, shape, dtype, copy])
Стиснута розріджена матриця dia_matrix (arg1 [, shape, dtype, copy]) Розріджена матриця з DIAgonal зберіганням
dok_matrix (arg1 [, фігура, dtype, копія]) Розрядна матриця на основі словника ключів.
lil_matrix (arg1 [, shape, dtype, copy]) Розріджена матриця на основі рядків

Будь-який з них може зробити перетворення.

import numpy as np
from scipy import sparse
a=np.array([[1,0,1],[0,0,1]])
b=sparse.csr_matrix(a)
print(b)

(0, 0)  1
(0, 2)  1
(1, 2)  1

Див. Http://docs.scipy.org/doc/scipy/reference/sparse.html#usage-information .


0

Що стосується зворотного, функція є inv(A), але я не рекомендуватиму її використовувати, оскільки для величезних матриць вона дуже обчислювально затратна і нестабільна. Натомість вам слід використовувати наближення до оберненого, або якщо ви хочете вирішити Ax = b, вам насправді не потрібно A -1 .


4
Питання задає питання про те, як згенерувати розріджену матрицю scipy, використовуючи матрицю / масив numpy, а не обернено як матрицю.
Вергілій Мінг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.