この質問は2つの部分(多分一つの解決策?)があります。疎行列から簡単に疎行列からのベクトルのサンプリング、およびサンプルから新しいマトリックスを作成する(パイソン)
サンプルベクトルを:ありスパース行列からベクトルを簡単にサンプリングする方法は? random.sampleを使って行をサンプルしようとすると、TypeErrorが発生します。疎な行列の長さはあいまいです。
indxSampls = sample(range(sm.shape[0]), k)
sampledRows = []
for i in indxSampls:
sampledRows+=[sm.getrow(i)]
その他の効率的な/エレガントなアイデア:
from random import sample
import numpy as np
from scipy.sparse import lil_matrix
K = 2
m = [[1,2],[0,4],[5,0],[0,8]]
sample(m,K) #works OK
mm = np.array(m)
sample(m,K) #works OK
sm = lil_matrix(m)
sample(sm,K) #throws exception TypeError: sparse matrix length is ambiguous.
私の現在のソリューションは,,のようなものを、その後、行列の行数からサンプル)(GetRowを使用するのですか?高密度マトリクスサイズは1000×30000であり、より大きい可能性がある。スパースベクトルのリストからスパース行列を構築
:今、私は、その後、それを高密度化するリストのリストに変換し、convetなしスパース行列に変換することができますどのように、私は、サンプリングベクトルsampledRowsのリストを持っている想像それはlil_matrixに?
スパース(スパースではない)ベクトルではなく、さまざまな長さのリストを返すので、実際には機能しません。例えば([[1,2]、[8]]、dtype = object) – ScienceFriction
@ScienceFrictionおっと、そうです。すべての行にエントリがあるサンプルをテストします。私は答えを1つのステップで実際にあなたを疎な行列にする類似のものに変更しました。 – Dougal
ありがとう!魅力のように働く。 – ScienceFriction