Рассмотрим следующее:
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 000 из fine
плюс в цикле из 300+ итераций.
Я пытался сделать это параллельно, используя библиотеку multiprocessing
в Python2.7, но мне не удалось продвинуться далеко. Мне нужно одновременно читать оба временных ряда, чтобы получить соответствующие значения fine
для каждого значения в coarse
, а также работать только со значениями выше 0, чего требует мой анализ.
Я был бы признателен за предложения по лучшему способу сделать это. Я полагаю, что если я смогу определить функцию сопоставления для использования с Pool.map
в multiprocessing
, я смогу распараллелить это? Я только начал с multiprocessing
, поэтому не знаю, есть ли другой способ?
Спасибо.