在Python中并行化网格化数据的嵌套循环

时间:2016-12-21 05:33:20

标签: python parallel-processing nested

我很难找到一个简单的例子来在Python中的NDim数据中并行化嵌套循环。

作为一个简单的例子,假设我们有一个尺寸(时间,纬度,经度)的网格化降水数据,并且要找到每个纬度网格点的时间平均值,即获得与data.mean(轴)相同的结果。 = 0)。

def mean(data):
result = np.zeros(data[0,:,:].shape, dtype=np.float)
for i in range(data.shape[1]):
    for j in range(data.shape[2]):
        result[i,j] = data[:,i,j].mean()
return result

并行化此功能最优雅的方法是什么?

更新:可以在https://www.esrl.noaa.gov/psd/data/gridded/data.gpcp.html下载沉降数据。

测试代码:

%matplotlib inline
import xarray
import numpy as np
import matplotlib.pyplot as plt

#Load data:
ds   = xarray.open_dataset('precip.mon.mean.nc')

# Select a small subset, shape is now (442, 50,50)
data = ds.precip[:,:50,:50].to_masked_array()

#define the function to compute the temporal mean at each grid point:
def mean(data):
    result = np.zeros(data[0,:,:].shape, dtype=np.float)
    for i in range(data.shape[1]):
        for j in range(data.shape[2]):
            result[i,j] = data[:,i,j].mean()
    return result

#Call the function
result = mean(data)

#A quick plot for visual reference
plt.figure()
plt.imshow(result, origin='upper',interpolation='None'); plt.colorbar()

我的工作代码涉及更复杂的技术(而不仅仅是采用均值),但基本代码结构类似:嵌套双循环访问每个网格点以执行分析,并将结果保存为2D或ND数组。因此能够并行化这将是非常有益的。

0 个答案:

没有答案