約 500 万のゼロ以外の要素を含む 10,000 x 40,000 の CSR マトリックスを /dev/null にダンプするには、約 6 分かかりました。より速い代替手段はありますか?
それを別のスパース形式に変換しても役に立ちませんでした。
約 500 万のゼロ以外の要素を含む 10,000 x 40,000 の CSR マトリックスを /dev/null にダンプするには、約 6 分かかりました。より速い代替手段はありますか?
それを別のスパース形式に変換しても役に立ちませんでした。
scikit-learn の最先端の開発バージョンにアップグレードする (またはこのファイルをコピーしてインストールに貼り付ける) と、dump_svmlight_file
以前よりも約 10 倍高速になります。
編集:次の答えは無視してください!実際には、scikit-learn 実装の作成者によるCython ベースのダンパーがあります。同じ行列を 3 秒でダンプできます。
以下は 60 秒で実行され、そのうちの 6 つはループの外で費やされます。COO マトリックスが本質的に正しい形式であるという事実を利用します。
def dump_svmlight_file_sparse(X, y, f, zero_based=True):
X = X.sorted_indices().tocoo()
if not zero_based:
X.col += 1
y = y.astype(int).astype(str)
col = X.col.astype(str)
dat = X.data.astype(str)
last_row = 0
f.write(y[0])
for i in xrange(len(X.data)):
while last_row < X.row[i]:
last_row += 1
f.write('\n'+y[last_row])
f.write(' '+col[i]+':'+dat[i])
f.write('\n')