2017-10-29 7 views
0

dataと呼ばれるscipyスパース行列の特定のインデックスに対応するcluster0Randという整数のリストがあります。リストからscipyマトリックスの行を削除

インデックスにある行だけで構成される新しいscipyマトリックスを作成したいのですか?例えば

data = csr_matrix([[1, 2, 0], [0, 0, 3], [4, 0, 5]]) 
cluster0Rand = [0,1] 

は、所望の出力は次のようになります。私はこのefficently本当のリストはindexsの何千とscipyのダウンロード行列があるから構成されていることを考えると行うことができますどのように

csr_matrix([[1, 2, 0], [0, 0, 3]]) 

(10000, 100000)

答えて

1

はあなたの例を考えると、平野インデックスは仕事をしていません:

In [300]: data = sparse.csr_matrix([[1, 2, 0], [0, 0, 3], [4, 0, 5]]) 
In [301]: idx = [0,1] 
In [302]: data[idx,:] 
Out[302]: 
<2x3 sparse matrix of type '<class 'numpy.int32'>' 
    with 3 stored elements in Compressed Sparse Row format> 
In [303]: _.A 
Out[303]: 
array([[1, 2, 0], 
     [0, 0, 3]], dtype=int32) 

この種の索引付けは、密な配列よりも希薄なマトリックスでは遅くなります。しかし、それはまばらな行列強度、行列乗算を使用します。 idxをセレクタ・マトリックスに変換します。

In [313]: (sparse.csr_matrix([[1,0,0],[0,1,0]])*data).A 
Out[313]: 
array([[1, 2, 0], 
     [0, 0, 3]], dtype=int32) 
関連する問題