web-dev-qa-db-fra.com

Comment transformer une «matrice clairsemée SciPy» en une «matrice NumPy»?

J'utilise une fonction python appelée "incidence_matrix (G)", qui renvoie la matrice incidente du graphique. Elle provient du package Networkx. Le problème auquel je suis confronté est le type de retour de cette fonction est "Scipy Sparse Matrix". J'ai besoin d'avoir la matrice Incident au format matrice numpy ou tableau. Je me demandais s'il y avait un moyen facile de le faire ou non? Ou y a-t-il une fonction intégrée qui peut le faire transformation pour moi ou pas?

Merci

17
Mr.Boy

scipy.sparse.*_matrix a plusieurs méthodes utiles, par exemple, si a est par exemple scipy.sparse.csr_matrix:

  • a.toarray() ou a.A - Retourne une représentation dense de ndarray de cette matrice. (numpy.array, Recommandé)
  • a.todense() ou a.M - Retourne une représentation matricielle dense de cette matrice. (numpy.matrix)
33
sebix

La manière la plus simple est d'appeler la méthode todense () sur les données:

In [1]: import networkx as nx

In [2]: G = nx.Graph([(1,2)])

In [3]: nx.incidence_matrix(G)
Out[3]: 
<2x1 sparse matrix of type '<type 'numpy.float64'>'
    with 2 stored elements in Compressed Sparse Column format>

In [4]: nx.incidence_matrix(G).todense()
Out[4]: 
matrix([[ 1.],
        [ 1.]])

In [5]: nx.incidence_matrix(G).todense().A
Out[5]: 
array([[ 1.],
       [ 1.]])
1
Aric

J'ai trouvé que dans le cas des matrices csr, todense() et toarray() enveloppait simplement les tuples plutôt que de produire une version formatée ndarray des données sous forme matricielle. C'était inutilisable pour les classificateurs skmultilearn que je forme.

Je l'ai traduit en lil matrix - un format que numpy peut analyser avec précision, puis j'ai exécuté toarray() sur cela:

sparse.lil_matrix(<my-sparse_matrix>).toarray()
0
user108569