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

作为一个简单的例子,假设我们有一个尺寸(时间,纬度,经度)的网格化降水数据,并且要找到每个纬度网格点的时间平均值,即获得与data.mean(axis = 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数组 . 因此能够并行化这将是非常有益的 .