[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
- To: dennou-ruby@xxxxxxxxxxx
- Subject: [dennou-ruby:002130] Re: GPhys::NetCDF_IO.each_along_dims_write returns an error
- From: Takeshi Horinouchi <horinout@xxxxxxxxxxxxxxxxxx>
- Date: Tue, 15 Feb 2005 10:54:21 +0900
西澤様
一点確認まで。
> 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 を使わないで同じことをすると
同じエラーになったりしませんか。
> あとデータが大きいときに平均などをする場合、
> ファイルに書き出すときはこのメソッドがありますが、
> 結果を得たい場合に同様に内部でループを回してメモリを節約するメソッドがほしいです。
そうですね。前から作りたいと思ってます。簡単なはずですし。
堀之内