NetCDFを扱うときのメモ
ChangeLog
- 2018/07/04 欠損値の指定方法を追記
- 2015/09/04 コメント内容の反映,書き込み方法の追記
読み込み
NetCDFはnetCDF4モジュールで読み込めます.
Githubページからダウンロード&インストールするか,
MacならAnaconda、WindowsならPython(x,y)等に標準でついてます.
import netCDF4
nc = netCDF4.Dataset('filename.nc', 'r')
dim = len(nc.dimensions['dimname'])
var = nc.variables['varname'][:]
nc.close()
書き込み
import netCDF4
from numpy import dtype
# オブジェクトを作成し,各次元数を設定します.
nc = netCDF4.Dataset('filename.nc', 'w', format='NETCDF3_CLASSIC')
nc.createDimension('ntime', len(time_out)) # e.g. time_out = [0, 1, ...]
# nc.createDimensions('ntime', None) # unlimitedにする場合
nc.createDimension('xi', x) # e.g. x = 10
nc.createDimension('eta', y) # e.g. y = 10
# その後,各変数を定義します.
# 以下の例では,時間,緯度,経度,3次元変数を定義します.
time = nc.createVariable('time', dtype('int32').char, ('ntime',))
time.long_name = 'time of test variable'
time.units = 'days since 1968-05-23 00:00:00'
lon = nc.createVariable('lon', dtype('double').char, ('eta', 'xi'))
lon.long_name = 'east longitude'
lon.units = 'degree of east longitude'
lat = nc.createVariable('lat', dtype('double').char, ('eta', 'xi'))
lat.long_name = 'north latitude'
lat.units = 'degree of north latitude'
var = nc.createVariable('varname', dtype('double').char, ('ntime', 'eta', 'xi'))
var.long_name = 'test variable'
var.units = 'unit of test variable'
# 最後に,予め np.ndarray 等で作成しておいた値を代入します.
time[:] = time_out
lon[:,:] = lon_out
lat[:,:] = lat_out
var[:,:,:] = var_out
nc.close()
欠損値の指定方法
特定の値を欠損値扱いにしたい場合,変数作成時にfill_value
を設定してやれば良い.
# -999を欠損値とする場合
var = nc.createVariable('varname', dtype('double').char, ('ntime', 'eta', 'xi'), fill_value=-999)
(2018/07/04追記,Thanks @yutabvb)