2017-12-04 18 views
0

私はのscipy.sparse.csr_matrixオブジェクトを整数キーで値として持っています。これを別のファイルに保存するにはどうすればよいですか?scipy sparse csr matrixの辞書を保存して読み込む方法は?

私は、各エントリのための定期的なndarrayを持っていた場合、私はjsonでそれをシリアル化できますが、私は疎行列でこれをしようとすると:

TypeError: <75x75 sparse matrix of type '<type 'numpy.int64'>' with 10 stored elements in Compressed Sparse Row format> is not JSON serializable

with open('filename.txt', 'w') as f: 
      f.write(json.dumps(the_matrix)) 

私はTypeError例外を取得します

整数と疎なcsr行列の値であるキーを使用して辞書を保存するにはどうすればよいですか?

答えて

0

Newer scipyバージョンは、scipy.sparse.save_npz機能(および対応する負荷)を持っています。スパース行列の属性をnumpysavez zipアーカイブに保存します。 csrの場合は、data,indicesおよびindptrアレイに加えてシェイプを保存します。

scipy.io.savematは、疎行列をMATLAB互換フォーマット(csc)で保存できます。疎行列を扱うことができる1つまたは2つの他のフォーマットがありますが、私はそれを扱っていません。

スパース行列にはnumpy配列が含まれていますが、配列サブクラスではないため、numpy関数を直接使用することはできません。

numpyアレイのpickleは、np.saveです。オブジェクトを含む配列は、pickle(可能な場合)を使用します。だから配列の辞書のピクルスが動作するはずです。

疎なdokフォーマットはdictのサブクラスなので、pickleableかもしれません。それはjsonでも動作するかもしれません。しかし、私はそれを試していない。ところで

、平野numpyの配列のいずれかjsonedすることはできません。

In [427]: json.dumps(np.arange(5)) 
TypeError: array([0, 1, 2, 3, 4]) is not JSON serializable 
In [428]: json.dumps(np.arange(5).tolist()) 
Out[428]: '[0, 1, 2, 3, 4]' 

dokはどちらか動作しません。

In [444]: io.mmwrite('test.mm', M) 
In [446]: cat test.mm.mtx 
%%MatrixMarket matrix coordinate integer general 
% 
1 5 4 
1 2 1 
1 3 2 
1 4 3 
1 5 4 
+0

おかげ@hpaulj、私は 'json'直列化可能なオブジェクトに言及していたとき、私はを参照したキーはインデックスのタプルあり、

In [433]: json.dumps(M.todok()) TypeError: keys must be a string 

MatrixMarketは、スパース扱うテキスト形式です'dict'はシリアライズ可能です。 numpy配列の 'dict'は直列化することができます。 scipy sparse csr行列の 'dict'はできません。私はキーが整数で値がscipy sparse csr matricesである 'dict'を保存する方法を探しています。 – StatsSorceress

+0

辞書を直列化するには、その値のすべてを直列化できる必要があります。つまり、直列化にはコンポーネントオブジェクトごとに定義されます。 – hpaulj

+0

さて、疎行列は直列化できないので、直列化をそのままにしておきます。どのように値が非直列化可能なdictを保存することができますか? – StatsSorceress

関連する問題