如何在 netcdf 文件中写入空值?
How to write null values in netcdf file?
_FillValue 或 missing_value 是否仍占用存储空间 space?
如果有一个包含一些空值的二维数组,我如何将它写入 netcdf 文件以节省存储空间space?
在 netCDF3 中,每个值都需要相同数量的磁盘 space。在 netCDF4 中,可以使用 gzip 压缩减少所需的磁盘 space。实际压缩率取决于数据。如果有很多相同的值(例如缺失数据),您可以获得很好的结果。这是 python 中的示例:
import netCDF4
import numpy as np
import os
# Define sample data with all elements masked out
N = 1000
data = np.ma.masked_all((N, N))
# Write data to netCDF file using different data formats
for fmt in ('NETCDF3_CLASSIC', 'NETCDF4'):
fname = 'test.nc'
ds = netCDF4.Dataset(fname, format=fmt, mode='w')
xdim = ds.createDimension(dimname='x', size=N)
ydim = ds.createDimension(dimname='y', size=N)
var = ds.createVariable(
varname='data',
dimensions=(ydim.name, xdim.name),
fill_value=-999,
datatype='f4',
complevel=9, # set gzip compression level
zlib=True # enable compression
)
var[:] = data
ds.close()
# Determine file size
print fmt, os.stat(fname).st_size
有关详细信息,请参阅 netCDF4-python documentation 第 9) "Efficient compression of netCDF variables" 部分。
为了补充 Funkensieper 的出色答案,您可以使用 cdo 从命令行复制和压缩文件:
cdo -f nc4c -z zip_9 copy in.nc out.nc
可以简单地使用gzip或zip等压缩文件,但缺点是需要先解压再阅读。使用 netcdf4 压缩功能可以避免这种情况。
您可以使用 -z zip_X select 您的 X 级压缩。如果您的文件非常大,您可能想要牺牲一点 return 中的文件大小以加快访问时间(例如,使用 zip_5 或 6,而不是 9)。在许多异构数据的情况下,压缩增益相对于未压缩的文件较小。
或与 NCO
类似
ncks -7 -L 9 in.nc out.nc
_FillValue 或 missing_value 是否仍占用存储空间 space?
如果有一个包含一些空值的二维数组,我如何将它写入 netcdf 文件以节省存储空间space?
在 netCDF3 中,每个值都需要相同数量的磁盘 space。在 netCDF4 中,可以使用 gzip 压缩减少所需的磁盘 space。实际压缩率取决于数据。如果有很多相同的值(例如缺失数据),您可以获得很好的结果。这是 python 中的示例:
import netCDF4
import numpy as np
import os
# Define sample data with all elements masked out
N = 1000
data = np.ma.masked_all((N, N))
# Write data to netCDF file using different data formats
for fmt in ('NETCDF3_CLASSIC', 'NETCDF4'):
fname = 'test.nc'
ds = netCDF4.Dataset(fname, format=fmt, mode='w')
xdim = ds.createDimension(dimname='x', size=N)
ydim = ds.createDimension(dimname='y', size=N)
var = ds.createVariable(
varname='data',
dimensions=(ydim.name, xdim.name),
fill_value=-999,
datatype='f4',
complevel=9, # set gzip compression level
zlib=True # enable compression
)
var[:] = data
ds.close()
# Determine file size
print fmt, os.stat(fname).st_size
有关详细信息,请参阅 netCDF4-python documentation 第 9) "Efficient compression of netCDF variables" 部分。
为了补充 Funkensieper 的出色答案,您可以使用 cdo 从命令行复制和压缩文件:
cdo -f nc4c -z zip_9 copy in.nc out.nc
可以简单地使用gzip或zip等压缩文件,但缺点是需要先解压再阅读。使用 netcdf4 压缩功能可以避免这种情况。
您可以使用 -z zip_X select 您的 X 级压缩。如果您的文件非常大,您可能想要牺牲一点 return 中的文件大小以加快访问时间(例如,使用 zip_5 或 6,而不是 9)。在许多异构数据的情况下,压缩增益相对于未压缩的文件较小。
或与 NCO
类似ncks -7 -L 9 in.nc out.nc