首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复杂生态模型的优化dask

复杂生态模型的优化dask
EN

Stack Overflow用户
提问于 2020-05-29 17:46:03
回答 1查看 74关注 0票数 0

我正在尝试在Dask环境中运行一个生态模型。虽然我对计算的速度并不完全满意。我在本地的一台机器上运行它。下面的代码中有没有一些明显的快速改进:

代码语言:javascript
复制
from dask_open import dask_slice
from dask.distributed import Client
from calc_si_no_bloom import calc_si_no_bloom
import time
import dask
client = Client(processes=False)
start_time = time.clock()
path_tx_01 = r'C:\Users\eobs_data\tx_mean_0.1_hom.nc'
path_tn_01 = r'C:\Users\eobs_data\tn_mean_0.1_hom.nc'
mindask, latlon, latitude = dask_slice(path_tn_01, 1980, 2018,250, -25, 45, 34, 72)
maxdask, latlon, latitude = dask_slice(path_tx_01, 1980, 2018,250, -25, 45, 34, 72)
lazy_results = dask.delayed(calc_si_no_bloom)(mindask,maxdask,latitude) 
# mindask and maxdask have a chunksize of (1, 20000, 250) and 39 chunks 
lfmtx, lfrz = lazy_results.compute()
print(time.clock() - start_time, "seconds for model run")

dask_slice函数:

代码语言:javascript
复制
def dask_slice(path, startyear, endyear, ndays, latmin, latmax, lonmin, lonmax):
data = xr.open_dataarray(path)
data = data.sel(time=slice('1950-01-01','2018-12-31'))
data = data.sel(latitude=slice(latmin,latmax))
data = data.sel(longitude=slice(lonmin,lonmax))
data = data.stack(latlon=['latitude','longitude'])
latlon = list(data.latlon.values) #latlon[45693] = (49.875,14.875)
latitude = data.latitude.values
group = data.groupby('time.year')
list_group = list(group)
dictio = dict((x,y) for x,y in list_group)
lijst = []
for i in range(startyear,endyear+1):
    year = dictio[i].values[:ndays,:]
    lijst.append(year)
daskarray = daar.stack(lijst, axis=0)
daskarray_F = tempunits(daskarray, 'C', 'F')
daskarray = np.swapaxes(daskarray_F,1,2)
return daskarray, latlon, latitude

模型本身(calc_si_no_bloom)根据最低和最高温度计算累积温度。它调用了许多不同的函数,所有这些函数都包含许多for循环。是改变组成模型的函数的结构更有意义,还是我实现Dask的效率很低?

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2020-06-13 23:24:45

提高代码性能的第一步通常是测量什么是慢的。我建议通读一下Dask在Understanding Performance上的文档,然后遵循那里的一些建议。

完成这项工作后,如果你有更具体的问题,我建议你再发一次更具体的问题(所以很少用于通用的“帮助我改进我的代码”查询)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62083083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档