我需要将一个for循环并行化。我的当前代码遍历了一个从xarray数据集中获取的id列表,使用相应的id从xarray数据集中获取行数据,调用一个函数(计算数据的三角分布),将函数结果附加到列表中,完成后将列表转换为 xarray 数据集,其中每个结果与相应的 id 相关联,以便稍后将此数据集附加到“主”数据集中。
我的代码大致如下:
我的代码大致如下:
from sklearn.preprocessing import MinMaxScaler
import xarray as xr
import scipy.stats as st
function call_func(data):
scaler = MinMaxScaler()
norm_data = scaler.fit_transform(np.reshape(data, (len(data),1)))
params = st.triang.fit(norm_data)
arg,loc,scale = params[:-2],params[-2],params[-1]
dist = st.triang(loc=loc, scale=scale, *arg)
return dist
if __name__ == "__main__":
for id in my_dataset['id'].values:
row_data= my_dataset.sel(id=id)['data'].values[0]
if len(row_data)>3 and all(row_data== 0) == False:
result = call_func(row_data)
result_list.append(result)
else:
result_list.append([])
new_dataset = xr.Dataset({'id': my_dataset['id'].values,
'dist_data':(['id','dist'],
np.reshape(np.array(result_list),(len(result_list),1)))
})
由于id_array很大,我希望可以并行化循环。这是一个通用的问题,但我对多进程工具还不够熟悉。您有什么建议如何将多进程与此任务结合起来吗?我的研究表明,使用multiprocessing和向列表中添加元素并不是最明智的选择。
ProcessPoolExecutor
的答案可以帮到你:https://dev59.com/52Uo5IYBdhLWcg3wnwj2#15918742 - Adam.Er8