在Python中对netCDF数据应用landsea掩码

2024-04-24 00:59:39 发布

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

我正在尝试对netCDF文件中的一些数据应用陆地/海洋掩码。我的代码可以工作,但是会修改磁盘上的文件。我希望能够在内存中执行,但是变量的形状类似于(240, 46, 400, 568),甚至只是运行{}来尝试类似的操作

with dataset('parameters/masks.nc', 'r') as mask, Dataset('remapped/' + ifile, 'a') as to_mask:
    masked_data = np.zeros(to_mask['alk'].shape)
    if len(to_mask['alk'].shape) == 4:  # The dimensions are time,depth,lat,lon
        for i in range(0, to_mask[var].shape[0]):
            masked_data[i, :, :, :] = ma.masked_where(
                np.logical_not(np.array(mask['tmask'][0, :, :, :], dtype=bool)),
                np.array(to_mask[var][i, :, :, :]))[:]

给我一个MemoryError。这对我来说有点奇怪,因为我可以加载数据并在没有内存问题的情况下使用它。在

我已经开始研究xarray,因为它似乎有一些我想用来处理数据的函数,比如简单的时间平均,但是似乎没有一种直接的方法可以像我尝试的那样应用掩码。在

当前代码:

^{pr2}$

Tags: 文件to数据内存代码datavaras
1条回答
网友
1楼 · 发布于 2024-04-24 00:59:39

像往常一样,多敲几个小时就可以帮你解决问题了。我的工作代码(请原谅更改变量名ect)如我所想的那样使用xarray。在

import xarray as xr

with xr.open_dataset(mask_file) as m_f, xr.open_dataset(input_file) as i_f:
    mask = m_f['tmask'][0, :, :, :].values
    data = i_f[var].where(mask)

相关问题 更多 >