Споделете SciPy Sparse Array между процесни обекти

Наскоро изучавах многопроцесорна обработка на Python и се натъкнах на пречка. Имам голям разреден SciPy масив (CSC-формат), който трябва да споделя във формат само за четене между 5 работни процеса. Прочетох това и this (numpy-shared), но това изглежда е само за плътни типове.

Как бих споделил scipy.sparse.csc_matrix() без копиране (или с минимално копиране) между 5 многопроцесорни обекта Process? Дори методът numpy-shared изглежда изисква копиране на целия масив и дори тогава не мога просто да конвертирам scipy.sparse в mp.Array(). Може ли някой да ми помогне да ме насочи в правилната посока?

Благодаря!


person Will    schedule 16.07.2013    source източник


Отговори (1)


Не мога да ви помогна с многопроцесорната част на вашия въпрос, но разредената 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.data, a.indices и a.indptr са трите numpy масива, които искате да споделите между вашите процеси, ако можете да направите това, тогава създаването на разредена матрица във всеки процес ще бъде евтина операция.

person Jaime    schedule 16.07.2013
comment
А, готино. Няма да прави копия по време на изграждането на csc_matrix()? - person Will; 17.07.2013
comment
Освен ако не посочите copy=True, не трябва. - person Jaime; 17.07.2013