3

c各反復で sparse matrixの列が得られるループがありますN

N使用を考えた列ごとに列を組み立て/成長/蓄積するには

N = scipy.sparse.hstack([N, c]) 

これを行うには、行列を長さ 0 の行で初期化するとよいでしょう。ただし、

N = scipy.sparse.csc_matrix((4,0))

を発生させValueError: invalid shapeます。

これを正しく行う方法はありますか?

4

2 に答える 2

3

できません。スパース行列は、NumPy 配列と比較して制限があり、特に0軸を許可しません。すべての疎行列コンストラクターはこれをチェックするため、そのような行列を作成できた場合、SciPy のバグを悪用していることになり、SciPy をアップグレードするとスクリプトが壊れる可能性があります。

そうは言っても、 n × 0 の NumPy 配列が許可されており、事実上ストレージ スペースを必要としないため、 n × 0 のスパース行列が必要な理由がわかりません。

sparse.hstack軸がゼロの NumPy 配列を処理できないことが判明したため、以前のコメントは無視してください。hstackただし、リスト内のすべての列を収集してから、1回の呼び出しでそれらを収集する必要があると思います。appendリストへの 'ing には償却された一定の時間がhstackかかりますが、線形の時間がかかるため、ループよりも優れています。したがって、提案されたアルゴリズムは線形である可能性がありますが、二次時間がかかります。

于 2013-06-19T15:11:46.190 に答える
1

少なくとも1あなたの形で使用する必要があります。

N = scipy.sparse.csc_matrix((4,1))

積み重ねることができるもの:

print scipy.sparse.hstack( (N,N) )
#<4x2 sparse matrix of type '<type 'numpy.float64'>'
#    with 0 stored elements in COOrdinate format>
于 2013-06-19T14:53:47.640 に答える