从大型dfs2文件中提取dfs0

2024-09-28 22:32:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从大型dfs2文件中提取dfs0,然后重试:

from mikeio import Dfs2
dfs = Dfs2(dfs2_filename)
ds = dfs.read()
(k,j) = dfs.find_nearest_element(lon,lat)
ds2 = ds.isel(k).isel(j)
ds2.to_dfs0(dfs0_filename)

这在大多数情况下都可以正常工作,但是,对于非常大的dfs2文件,我会遇到一个内存错误。 我可以通过以下选项降低内存成本:

ds = dfs.read(items=items,time_steps=time_steps)

但是,我对所有项目和时间步骤都感兴趣。 因此,我目前的工作是在时间维度中获取块,类似这样:

n = dfs.n_timesteps;
dChunk = int(np.ceil(n/nChunks))
for i_ch in range(chunks):
   time_steps = list(range((i_ch*dChunk),np.min([(i_ch+1)*dChunk,n])))
   ds = dfs.read(items=items,time_steps=time_steps)
   (k,j) = dfs.find_nearest_element(lon,lat)
   ds2 = ds.isel(k).isel(j)

然后,我将块保存为临时文件,然后是concat

做这件事最好的方法是什么

在“阅读”之前我能做一些形式的“isel”吗?与Dfsu的“元素”选项类似:

dfsu.read(items=None, time_steps=None, elements=None)

谢谢


Tags: 文件nonereadtimedsitemschsteps