Для разреженной матрицы SciPy можно использовать todense()
или toarray()
для преобразования в матрицу NumPy или массив. Каковы функции для выполнения обратного?
Я искал, но понятия не имел, какие ключевые слова должны быть правильными.
Для разреженной матрицы SciPy можно использовать todense()
или toarray()
для преобразования в матрицу NumPy или массив. Каковы функции для выполнения обратного?
Я искал, но понятия не имел, какие ключевые слова должны быть правильными.
Вы можете передать массив или матрицу numpy в качестве аргумента при инициализации разреженной матрицы. Например, для CSR-матрицы вы можете сделать следующее.
>>> 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 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
В scipy имеется несколько разреженных матричных классов.
bsr_matrix (arg1 [, shape, dtype, copy, blocksize]) Блочная матрица разреженных строк coo_matrix (arg1 [, shape, dtype, copy]) Редкая матрица в формате COOrdinate.
csc_matrix (arg1 [, shape, dtype, copy]) Сжатая матрица разреженных столбцов
csr_matrix (arg1 [, shape, dtype, copy]) Сжатая матрица разреженных строк dia_matrix (arg1 [, shape, dtype, copy]) Редкая матрица с DIAgonal storage
dok_matrix (arg1 [, shape, dtype, copy]) Словарь на основе разреженной матрицы. 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.
Что касается обратного, функция inv(A)
, но я не буду рекомендовать ее использовать, поскольку для огромных матриц она очень вычислительно дорогостоящая и нестабильная. Вместо этого вы должны использовать приближение к обратному, или если вы хотите решить Ax = b, вам действительно не нужен A -1.