Для разреженной матрицы SciPy можно использовать todense()
или toarray()
для преобразования в матрицу или массив NumPy. Какие функции делают обратное?
Я искал, но понятия не имел, какие ключевые слова должны быть правильными.
python
numpy
scipy
sparse-matrix
Хлопья
источник
источник
sparse.csr_matrix
В scipy есть несколько классов разреженных матриц.
Любой из них может сделать преобразование.
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/
источник