web-dev-qa-db-ja.com

「SciPyスパース行列」を「NumPy行列」に変換するにはどうすればよいですか?

python関数 "incidence_matrix(G)"を使用しています。これは、グラフのインシデントマトリックスを返します。これはNetworkxパッケージからのものです。私が直面している問題は、この関数の戻り値の型です。は「Scipy Sparse Matrix」です。インシデントマトリックスをnumpyマトリックスまたは配列の形式にする必要があります。それを簡単に行う方法があるかどうか疑問に思っていましたか?これを行うことができる組み込み関数はありますか?私にとっては変身?

ありがとう

17
Mr.Boy

_scipy.sparse.*_matrix_ にはいくつかの便利なメソッドがあります。たとえば、aが_scipy.sparse.csr_matrix_:

  • a.toarray()または_a.A_-この行列の密なndarray表現を返します。 (_numpy.array_、推奨)
  • a.todense()または_a.M_-この行列の密行列表現を返します。 (_numpy.matrix_)
33
sebix

最も簡単な方法は、データに対してtodense()メソッドを呼び出すことです。

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

Csr行列の場合、todense()およびtoarray()は、行列形式でデータのndarray形式のバージョンを生成するのではなく、単純にタプルをラップすることがわかりました。これは、私がトレーニングしているskmultilearn分類器では使用できませんでした。

私はそれを lilマトリックス -に変換しました。numpyは正確に解析でき、その上でtoarray()を実行しました。

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