我很难找到一个简单的例子来在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数组。因此能够并行化这将是非常有益的。