W przypadku macierzy rzadkich SciPy można użyć todense()
lub, toarray()
aby przekształcić w macierz lub tablicę NumPy. Jakie są funkcje odwrotne?
Szukałem, ale nie mam pojęcia, jakie słowa kluczowe powinny być trafne.
Odpowiedzi:
Podczas inicjowania rzadkiej macierzy można przekazać tablicę numpy lub macierz jako argument. Na przykład w przypadku macierzy CSR możesz wykonać następujące czynności.
>>> 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
W scipy jest kilka rzadkich klas macierzy.
bsr_matrix (arg1 [, shape, dtype, copy, blockize]) Block Sparse Row matrix
coo_matrix (arg1 [, shape, dtype, copy]) Rzadka macierz w formacie COOrdinate.
csc_matrix (arg1 [, shape, dtype, copy]) Skompresowana rzadka macierz kolumn
csr_matrix (arg1 [, shape, dtype, copy]) Skompresowana rzadka macierz
wierszowa dia_matrix (arg1 [, shape, dtype, copy]) Rzadka macierz z pamięcią
DIAgonal dok_matrix (arg1 [, kształt, dtype, kopia]) Macierz rzadka oparta na słowniku kluczy.
lil_matrix (arg1 [, shape, dtype, copy]) Rzędowa lista połączona z wierszami macierz rzadka
Każdy z nich może dokonać konwersji.
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
Zobacz http://docs.scipy.org/doc/scipy/reference/sparse.html#usage-information .
Jeśli chodzi o odwrotność, funkcja jest inv(A)
, ale nie polecam jej używania, ponieważ dla dużych macierzy jest bardzo kosztowna obliczeniowo i niestabilna. Zamiast tego powinieneś użyć przybliżenia do odwrotności, lub jeśli chcesz rozwiązać Ax = b, tak naprawdę nie potrzebujesz A -1 .
W Pythonie biblioteka Scipy może być używana do konwersji macierzy 2-D NumPy na macierz Sparse. Pakiet macierzy rzadkich SciPy 2-D dla danych numerycznych to scipy.sparse
Pakiet scipy.sparse zapewnia różne klasy do tworzenia następujących typów rzadkich macierzy z dwuwymiarowej macierzy:
Formaty CSR (Compressed Sparse Row) lub CSC (Compressed Sparse Column) obsługują efektywny dostęp i operacje macierzowe.
Przykładowy kod do konwersji macierzy Numpy na macierz skompresowanych rzadkich kolumn (CSC) i macierz skompresowanych rzadkich wierszy (CSR) przy użyciu klas 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
utwórz macierz Numpy 2-D
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))
Wydrukuj matrycę i inne szczegóły:
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'>
Konwersja macierzy A na reprezentację macierzy skompresowanych rzadkich wierszy przy użyciu klasy 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))
Dane wyjściowe instrukcji print:
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'>
Konwersja macierzy A do reprezentacji macierzy skompresowanych kolumn rzadkich przy użyciu klasy 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))
Dane wyjściowe instrukcji print:
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'>
Jak widać, rozmiar skompresowanych macierzy to 56 bajtów, a oryginalny rozmiar macierzy to 184 bajty.
Bardziej szczegółowe wyjaśnienia i przykłady kodów można znaleźć w tym artykule: https://limitlessdatascience.wordpress.com/2020/11/26/sparse-matrix-in-machine-learning/