Рассмотрим следующий пример:Одновременно чтение Numpy массивы в параллельном
fine = np.random.uniform(0,100,10)
fine[fine<20] = 0 # introduce some intermittency
coarse = np.sum(fine.reshape(-1,2),axis=1)
fine
является таймсерия величин (например, объем осадков). coarse
- это те же самые таймеры, но с разрешенным пополам разрешением, поэтому каждые 2 временных значения в fine
агрегируются до одного значения в coarse
.
Я тогда заинтересован в взвешивании, который определяет пропорцию величины coarse
, что соответствует каждому в fine
временного шага для случаев, когда значение coarse
больше нуля.
def w_xx(fine, coarse):
weights = []
for i, val in enumerate(coarse):
if val > 0:
w = fine[i*2:i*2+2]/val # returns both w1 and w2, w1 is 1st element, w2 = 1-w1 is second
weights.append(w)
return np.asarray(weights)
Так w_xx(fine,coarse)
будет возвращать массив формы 5,2
где элементы axis=1
являются веса fine
для значения coarse
.
Все это отлично подходит для небольших хранилищ, но я выполняю этот анализ на массивах размером ~ 60 тыс. От fine
, плюс в цикле из 300 итераций.
Я пытаюсь выполнить этот запуск параллельно, используя библиотеку multiprocessing
в Python2.7, но мне не удалось далеко продвинуться. Мне нужно одновременно считывать оба таймера, чтобы получить соответствующие значения fine
для каждого значения в coarse
, плюс работать только для значений выше 0, что и требует мой анализ.
Я был бы признателен за предложения по лучшему способу сделать это. Я предполагаю, что если я могу определить функцию сопоставления для использования с Pool.map
в multiprocessing
, я должен уметь распараллелить это? Я только начинал с multiprocessing
, так что я не знаю, есть ли другой способ?
спасибо.