变更netcdf文件变量的值

2024-10-01 11:34:29 发布

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

我有一个很大的三维netcdf文件。我想将netcdf文件中的变量LU_INDEX中的所有值10替换为2。在

我编写了这个python脚本来实现这一点,但它似乎不起作用。在

filelocation = 'D:/dataset.nc'

ncdataset = nc.Dataset(filelocation,'r')
lat           = ncdataset.variables['XLAT_M'][0,:,:]
lon           = ncdataset.variables['XLONG_M'][0,:,:]
lu_index     = ncdataset.variables['LU_INDEX'][0,:,:]
lu_index_new = lu_index
ncdataset.close()

nlat,nlon=lat.shape

for ilat in range(nlat):
    for ilon in range(lon):
        if lu_index == 10:
          lu_index_new[ilat,ilon] = 2

newfilename = 'D:/dataset.new.nc'
copyfile(ncdataset,newfilename)


newfile     = nc.Dataset(newfilename,'r+')
newfile.variables['LU_INDEX'][0,:,:]   = lu_index_new
newfile.close()

我得到了一个错误:

^{pr2}$

我不是一个非常有经验的python,所以如果有一个更简单的方法来做到这一点,你非常欢迎评论。在


Tags: 文件newindexnetcdfvariablesdatasetnclu
3条回答

我的计算结果如下:

import netCDF4 as nc
import numpy as np

pathname = 'D:'
filename = '%s/dataset.nc'%pathname
ncfile = nc.Dataset(filename,'r+')
lu_index = ncfile.variables['LU_INDEX'][:]
I = np.where(lu_index == 10)
lu_index[I] = 2
ncfile.variables['LU_INDEX'][:] = lu_index
filename.close()

print 'conversion complete'

使用np.数组可能不适用于具有以下错误的非常大的数据集

“值错误:数组太大;arr.size * arr.dtype.itemsize大于最大可能大小。”

CDO可以是一个很好的工具,而不是NCO,对我来说,它非常快。在

CDO setvals,10,2 in.nc out.nc

当必须替换同一nc文件中多个变量中的值时(例如,替换缺失值表示法),该方法尤其快速。 可以使用“setrtoc”代替setval来指定范围。在

你可以试试NCO

ncap2-s'其中(LU_索引==10)LU_索引=2'北卡罗来纳州输出.nc在

相关问题 更多 >