np arrayと座標をcubeに np array & coord to cube

irisで提供されている演算では,メタデータが保存されるようになっている.たとえば,4次元データ(座標(coord)は時間,鉛直,南北,東西)のiris.cubeの時間平均を取って作成される3次元データのiris.cubeには,鉛直,南北,東西の座標がくっついている.そしてこれを,iris.save(xxxx, 'yyy.nc')でファイルに保存すると,座標付きのnetcdfファイルとして保存される.

しかしirisで提供されていない演算を行うには,cubeのデータをnumpy arrayに取り出して,たとえば

data4d=np.array(cube4d.data)

としてから演算をするなどが必要だ.その場合はnumpy arrayはメタデータを持たないので,その後の計算結果でもメタデータは当然付随しない.その計算結果をファイルに保存し,その後にirisなどで効率よく使うためには,計算結果のデータをメタデータ付きのnetcdfで保存することがべきだ.これをirisで行うには,numpy array となっている計算結果をメタデータつきのiris.cubeに格納する.このこれは以下のようにして行うことができる.ここでは,元の4次元データがcube4dというiris.cubeに格納されており,また相関はcrr3dというnumpy array に格納されているとしている.

coord_prs=cube4d.coord('pressure')

coord_lat=cube4d.coord('latitude')

coord_lon=cube4d.coord('longitude')

cube_crr3d=iris.cube.Cube(crr3d, \

dim_coords_and_dims=[(coord_prs,0), (coord_lat,1), (coord_lon,2)], \

var_name='crr') # iris cubeへのnumpy array と座標,変数名の格納

iris.save(cube_crr3d, "cube_crr3d.nc")

なお単位もcubeに格納するには,units='m'などという行を加える.単位については注意が必要で,irisはCF convention (climate and forecast metadata convention) をできるだけ守っているので,CF conventionにないunitsを付けようとするとエラーになる.たとえば,相関だから単位は無次元だということでunits='nondimensional'をつかようとしたらエラーになった.なおCF conventionについての情報はhttp://cfconventions.org/にある.

ちなみに,緯度経度直交座標であれば,irisで書き出したnetcdfデータはGrADsでもsdfopenで読むことができる.

netcdfで保存すると,座標情報が同じファイルに入っているので,そのあとの扱いが容易になるし混乱することがない.irisを使うなら,計算結果をnetcdfで保存するようにしよう.