Comment transformer numpy.matrice ou un tableau de scipy sparse matrix

pour scipy sparse matrix, on peut utiliser todense() ou toarray() pour se transformer en matrice ou en tableau NumPy. Quelles sont les fonctions pour faire l'inverse?

j'ai cherché, mais je n'ai aucune idée des mots-clés qui devraient être le bon hit.

46
demandé sur Tonechas 2011-10-28 01:14:08

3 réponses

Vous pouvez passer un tableau numpy ou une matrice en argument lors de l'initialisation d'une matrice creuse. Pour une matrice de RSE, par exemple, vous pouvez faire ce qui suit.

>>> 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
79
répondu David Alber 2011-10-27 21:29:02

il y a plusieurs classes de matrice éparses dans scipy.

bsr_matrix(arg1[, forme, dtype, de copie, de la taille de bloc]) Bloc Éparses Ligne de la matrice

coo_matrix(arg1[, forme, dtype, copie]) d'Une matrice creuse dans un format de Coordonnées.

csc_matrix(arg1[, forme, dtype, copie]) Compressed Sparse Colonne de la matrice

csr_matrix(arg1[, forme, dtype, copie]) Compressed Sparse Ligne de la matrice

dia_matrix(arg1[, forme, dtype, copie]) Matrice clairsemée avec stockage en diagonale

dok_matrix(arg1[, forme, dtype, copie]) Dictionnaire Des Touches de matrices creuses.

lil_matrix (arg1 [, shape, dtype, copy])--2-->

Aucun d'entre eux peut faire la conversion.

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

voir http://docs.scipy.org/doc/scipy/reference/sparse.html#usage-information .

17
répondu cyborg 2011-10-27 23:45:16

Comme pour l'inverse, la fonction est inv(A), mais je ne recommande pas de l'utiliser, car pour les grosses matrices, il est très coûteux et instable sur le plan informatique. A la place, vous devriez utiliser une approximation de l'inverse, ou si vous voulez résoudre Ax = b vous n'avez pas vraiment besoin d'un -1.

0
répondu Fernando Bastos García 2016-07-30 23:46:03