我想从大型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)
谢谢
目前,Dfs2读取方法不存在
elements
或类似的参数(与Dfsu类似)。我认为read方法应该有这样一个参数,所以请在https://github.com/DHI/mikeio/issues中建议我认为你的分块版本是处理内存限制的好方法
相关问题 更多 >
编程相关推荐