Для разреженной матрицы 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'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
sparse.csr_matrix
В scipy есть несколько классов разреженных матриц.
bsr_matrix (arg1 [, shape, dtype, copy, blockize]) Блочная матрица разреженных
строк 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 хранилищем
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 .
В Python библиотеку Scipy можно использовать для преобразования двумерной матрицы NumPy в матрицу Sparse. Пакет SciPy 2-D разреженной матрицы для числовых данных - scipy.sparse
Пакет scipy.sparse предоставляет различные классы для создания следующих типов разреженных матриц из 2-мерной матрицы:
Форматы CSR (сжатая разреженная строка) или CSC (сжатый разреженный столбец) поддерживают эффективный доступ и матричные операции.
Пример кода для преобразования матрицы Numpy в матрицу сжатых разреженных столбцов (CSC) и матрицу сжатых разреженных строк (CSR) с использованием классов Scipy:
import sys # Return the size of an object in bytes
import numpy as np # To create 2 dimentional matrix
from scipy.sparse import csr_matrix, csc_matrix
# csr_matrix: used to create compressed sparse row matrix from Matrix
# csc_matrix: used to create compressed sparse column matrix from Matrix
создать двумерную матрицу Numpy
A = np.array([[1, 0, 0, 0, 0, 0],\
[0, 0, 2, 0, 0, 1],\
[0, 0, 0, 2, 0, 0]])
print("Dense matrix representation: \n", A)
print("Memory utilised (bytes): ", sys.getsizeof(A))
print("Type of the object", type(A))
Распечатайте матрицу и другие детали:
Dense matrix representation:
[[1 0 0 0 0 0]
[0 0 2 0 0 1]
[0 0 0 2 0 0]]
Memory utilised (bytes): 184
Type of the object <class 'numpy.ndarray'>
Преобразование матрицы A в представление сжатой разреженной матрицы строк с использованием класса csr_matrix:
S = csr_matrix(A)
print("Sparse 'row' matrix: \n",S)
print("Memory utilised (bytes): ", sys.getsizeof(S))
print("Type of the object", type(S))
Вывод операторов печати:
Sparse 'row' matrix:
(0, 0) 1
(1, 2) 2
(1, 5) 1
(2, 3) 2
Memory utilised (bytes): 56
Type of the object: <class 'scipy.sparse.csr.csc_matrix'>
Преобразование матрицы A в представление матрицы сжатых разреженных столбцов с использованием класса csc_matrix:
S = csc_matrix(A)
print("Sparse 'column' matrix: \n",S)
print("Memory utilised (bytes): ", sys.getsizeof(S))
print("Type of the object", type(S))
Вывод операторов печати:
Sparse 'column' matrix:
(0, 0) 1
(1, 2) 2
(2, 3) 2
(1, 5) 1
Memory utilised (bytes): 56
Type of the object: <class 'scipy.sparse.csc.csc_matrix'>
Как видно, размер сжатых матриц составляет 56 байтов, а размер исходной матрицы - 184 байта.
Более подробное объяснение и примеры кода см. В этой статье: https://limitlessdatascience.wordpress.com/2020/11/26/sparse-matrix-in-machine-learning/