2017-06-30 12 views
0

私は最近スパース行列を扱っています。私の目標は、何らかの形で、グラフの隣接リストをCSRフォーマットに変換することです。ここで定義するのはhttp://devblogs.nvidia.com/parallelforall/wp-content/uploads/2014/07/CSR.pngです。Scipy CSRスパース行列は実際にCOOですか?

1つの可能なオプションは、まずNumPy行列を作成してscipy.sparse.csr_matrixを使用して変換することです。問題は、SciPyのCSRがリンクで説明されているCSRと多少異なることです。私の質問は、ちょうど不一致で、私は自分のパーサを書く必要があります、またはSciPyが実際にリンクで定義されているCSRに変換できるかどうかです。このため

matrix([[1, 1, 0], 
     [0, 0, 1], 
     [1, 0, 1]]) 

CSRのフォーマットは、2つのアレイ、カラム(C)と行(R)から成る:

問題についてもう少し、の私はマトリックスを有しているとしよう。そして、私のようなルックスのために努力:

C: [0,1,2,0,2] 

R: [0,2,3,5] 

scipyのダウンロードが返されます。

2番目の列は私のCと同じである
(0, 0) 1 
    (0, 1) 1 
    (1, 2) 1 
    (2, 0) 1 
    (2, 2) 1 

、まだこれは私の理解にCOO形式ではなく、CSRです。 (これはcsr_matrix(adjacency_matrix)関数を使用して行われました)。

答えて

1

print(A)Acsr_matrix)経由で行列を印刷すると、内部に格納されている内容と表示される内容に違いがあります。

documentationには、属性がリストされています。とりわけ、以下の3つの属性がある:行列の行列
指数CSR形式インデックス配列の

データCSRフォーマットデータアレイは、行列のCSR形式インデックスポインタ配列indptr

A.dataA.indicesA.indptrにアクセスして操作できます。

ボトムライン:scipyのCSRフォーマットは「本当の」CSRフォーマットであり、独自のパーサーを書く必要はありません(あなたのケースでは不要なことを気にしない限りdataアレイ)。
注意:CSR formatの行列は常に2つではなく3つの配列で表されます。

+0

ありがとう!これは私が持っていなかった欠けている情報でした。私は3つの配列表現があることを認識しますが、ポインタ部分は別々に記述されます。 –

関連する問題