考虑以下:
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
是相同的时间序列,但分辨率减半,因此fine
中的每2个时间步长会汇总为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
。对于较小的时间序列来说,这一切都很好,但是我正在大约60k大小的
fine
数组上进行此分析,并进行了300多次迭代。我一直在尝试使用Python2.7中的
multiprocessing
库并行运行此程序,但是我还没走得太远。为了同时获取fine
中每个值的coarse
值,我需要同时读取两个时间序列,并且仅对大于0的值起作用,这就是我的分析所要求的。我希望您能提出更好的建议。我想如果可以在
Pool.map
中定义与multiprocessing
一起使用的映射函数,我应该能够并行化吗?我只是刚开始使用multiprocessing
,所以我不知道是否还有其他方法?谢谢。
最佳答案
您只需执行以下操作,即可以矢量化形式获得相同的结果:
>>> (fine / np.repeat(coarse, 2)).reshape(-1, 2)
那么您可以使用
coarse
过滤出np.isfinite
为零的行,因为如果coarse
为零,则输出为inf
或nan
。关于python - 同时并行读取numpy数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32439954/