2013-07-16 51 views
3

我最近一直在學習Python多處理,並且遇到了障礙。我有一個稀疏的SciPy數組(CSC格式),我需要共享只讀 5個工作進程之間的格式。我讀過thisthis(numpy-shared),但這似乎只適用於密集類型。在過程對象之間共享SciPy稀疏陣列

如何在5個多處理過程對象之間共享scipy.sparse.csc_matrix()而不進行復制(或以最少的複製)?即使是numpy共享的方法似乎也需要複製整個數組,即使這樣,我也不能將scipy.sparse轉換爲mp.Array()。任何人都可以幫助我指出正確的方向嗎?

謝謝!

回答

2

我不能幫你處理你的問題的多處理部分,但CSC稀疏矩陣只有三個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.indicesa.indptr是你希望你的進程間共享三個numpy的數組,如果你可以做到這一點,然後在每個過程中實例化一個稀疏矩陣將是一個廉價的操作。

+0

啊,很酷。它不會在csc_matrix()構造過程中進行復制? – Will

+1

除非你指定'copy = True',否則它不應該。 – Jaime