[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:002130] Re: GPhys::NetCDF_IO.each_along_dims_write returns an error



西澤様

一点確認まで。

> NetCDF_IO.each_along_dims_write
> がエラーになります。
> データは
> http://druby.rish.kyoto-u.ac.jp/arch/era40/
> からとってきた月平均気温です(1Gくらいあります)。
> 以下に結果を示します。
> 
> %irb -r numru/gphys
> irb(main):001:0> include NumRu
> Object
> irb(main):002:0> g = GPhys::IO.open("t.nc","t")
> <GPhys grid=<4D grid <axis pos=<'longitude' in 't.nc'  sfloat[144]>>
>         <axis pos=<'latitude' in 't.nc'  sfloat[73]>>
>         <axis pos=<'levelist' in 't.nc'  int[23]>>
>         <axis pos=<'time' in 't.nc'  int[2160]>>>
>    data=<'t' in 't.nc'  sint[144, 73, 23, 2160]>>
> irb(main):003:0> ofile = NetCDF.create("t.xm.nc")
> NetCDF:t.xm.nc
> irb(main):004:0> out = GPhys::NetCDF_IO.each_along_dims_write(g,ofile,-1){|sub| [sub.mean(0)] }
> NetcdfBadtype: Not a netCDF data type or _FillValue type mismatch
>         from /usr/lib/ruby/1.6/numru/gphys/varraynetcdf.rb:45:in `enddef'
>         from /usr/lib/ruby/1.6/numru/gphys/varraynetcdf.rb:45:in `enddef'
>         from /usr/lib/ruby/1.6/numru/gphys/varraynetcdf.rb:110:in `put'
>         from /usr/lib/ruby/1.6/numru/netcdf.rb:752:in `[]='
>         from /usr/lib/ruby/1.6/numru/gphys/varray.rb:499:in `[]='
>         from /usr/lib/ruby/1.6/numru/gphys/gphys_io_common.rb:112:in `each_along_dims_write'
>         from /usr/lib/ruby/1.6/numru/gphys/gphys_io_common.rb:110:in `each'
>         from /usr/lib/ruby/1.6/numru/gphys/gphys_io_common.rb:110:in `each_along_dims_write'
>         from /usr/lib/ruby/1.6/numru/gphys/gphys_io_common.rb:78:in `each'
>         from /usr/lib/ruby/1.6/numru/gphys/gphys_io_common.rb:78:in `each_along_dims_write'
>         from /usr/lib/ruby/1.6/numru/gphys/gphys_netcdf_io.rb:375:in `each_along_dims_write'
>         from (irb):4

each_along_dims_write の問題なのですね。つまり、
g = GPhys::IO.open("t.nc","t")[false,0]
とか、
g = GPhys::IO.open("t.nc","t")[false,0..3]
などにして、データサイズを限っておいて、
each_along_dims_write を使わないで同じことをすると
同じエラーになったりしませんか。

> あとデータが大きいときに平均などをする場合、
> ファイルに書き出すときはこのメソッドがありますが、
> 結果を得たい場合に同様に内部でループを回してメモリを節約するメソッドがほしいです。

そうですね。前から作りたいと思ってます。簡単なはずですし。

堀之内