9

私は最近、Python マルチプロセッシングを学んでいて、障害に遭遇しました。5 つのワーカー プロセス間で読み取り専用形式で共有する必要がある、大容量のスパース SciPy 配列 (CSC 形式) があります。これこれ(numpy-shared)を読みましたが、これはdense-typeのみのようです。

5 つのマルチプロセッシング Process オブジェクト間でコピーせずに (または最小限のコピーで) scipy.sparse.csc_matrix() を共有するにはどうすればよいですか? numpy-shared メソッドでさえ、配列全体をコピーする必要があるようですが、それでも scipy.sparse を mp.Array() に変換することはできません。誰かが私を正しい方向に向けるのを手伝ってくれますか?

ありがとう!

4

1 に答える 1

4

質問のマルチプロセッシング部分についてはお手伝いできませんが、CSC スパース行列は 3 つの numpy 配列にすぎません。b次のようにして、疎行列 と同じメモリ オブジェクトを共有する別の疎行列 をインスタンス化できますa

import scipy.sparse as sps

b = sps.csc_matrix((a.data, a.indices, a.indptr), shape=a.shape, copy=False)

a.dataa.indicesおよびa.indptrは、プロセス間で共有したい 3 つの numpy 配列です。それが可能であれば、各プロセスで疎行列をインスタンス化することは安価な操作になります。

于 2013-07-16T21:52:07.243 に答える