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
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
)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.]])
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()