scipyスパース行列を構築する最善の方法の1つは、coo_matrixメソッドです。大きなscipyスパース行列を作成する
coo_matrix((data, (i, j)), [shape=(M, N)])
where:
data[:] are the entries of the matrix, in any order
i[:] are the row indices of the matrix entries
j[:] are the column indices of the matrix entries
しかし、行列が非常に大きい場合、i、jおよびデータベクトル全体をメモリにロードすることは現実的ではありません。
(data、(i、j))がディスクから(イテレータまたはジェネレータを使って)供給され、ディスク上の配列/ベクトルオブジェクトが.npyまたはpickleの形式であるようなcoo_matrixを構築するにはどうすればよいですか?
pickpyは、numpy.save/loadがscipy sparseに最適化されていないため、より良いオプションです。もっと速いフォーマットがあるかもしれません。
numpy.genfromtext()とnumpy.loadtxt()は両方とも扱いにくく、遅く、メモリが不足しています。
例を使用してcoo_matrixを作成すると、メモリにオブジェクトデータ、行、colsおよびMが含まれます。問題は、ストリーミング行、列およびデータを使用してインクリメンタルにcoo_matrixを作成できるかどうかです。あなたの答えはそれが不可能であることを示唆しています。 –
'coo_matrix'の' __init__'コードはPythonで書かれており、簡単に従うことができます。ブロックから 'coo'マトリックスを構築する' bmat'のコードもまた参考になります。 – hpaulj