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

[dennou-ruby:003945] Re: __shape_matching のバグ



ありがとうございます。確かに辿りつけないとだめですね。
あとで確認します。堀之内

> 電脳 Ruby のみなさま: 京大気象学研究室 M2 の松葉です.
> 
> gphys.rb の中の __shape_matching というメソッドにバグを見つけましたので,
> パッチを作成してみました.添付いたします.GPhys のバージョンは 1.5.0-1 です.
> 
> どういうバグかと一応説明しておきますと,たとえば,[lon, lat, z, time] = [32, 32, 32, 7]
> であるような GPhys オブジェクトに対して,[lat] の一次元データを足すようなことを考えると,
> match する軸を探すときに index または rindex で一致する軸を探そうとするので,目的の真ん中の
> 32 にたどり着けないというものです.
> 
> 滅多に遭遇することではないかと思いますが,取り込んでいただけると助かります.
> 
> サンプルスクリプトも付けておきます (意味のある計算ではありませんが,動作確認のため).
> 
> ---------- ここから ----------
> require 'numru/gphys'
> include NumRu
> 
> nx = NArray.float(10).indgen!  # 0,1,2,..
> ny = NArray.float(10).indgen!  # 0,1,2,..
> nz = NArray.float(10).indgen!  # 0,1,2,..
> nt = NArray.float(10).indgen!  # 0,1,2,..
> nm = NArray.float(10).indgen!  # 0,1,2,..
> 
> vx = VArray.new( nx, {"long_name"=>"x coord","units"=>"m"}, "x")
> vy = VArray.new( ny, {"long_name"=>"y coord","units"=>"m"}, "y")
> vz = VArray.new( nz, {"long_name"=>"z coord","units"=>"m"}, "z")
> vt = VArray.new( nt, {"long_name"=>"time","units"=>"s"}, "t")
> vm = VArray.new( nm, {"long_name"=>"member","units"=>""}, "m")
> 
> xax = Axis.new.set_pos(vx)
> yax = Axis.new.set_pos(vy)
> zax = Axis.new.set_pos(vz)
> tax = Axis.new.set_pos(vt)
> max = Axis.new.set_pos(vm)
> 
> grid = Grid.new(xax, yax, zax, tax, max)
> ndata = NArray.float(vx.length, vy.length, vz.length, vt.length,
> vm.length).indgen!
> vdata = VArray.new(ndata, {'long_name'=>"dummy data"}, "z")
> gdata = GPhys.new(grid, vdata)
> 
> cut_gdata = gdata[0, false, 0, 0]
> p gdata + cut_gdata # パッチを当てないとここでエラーが出ます
> ---------- ここまで ----------
> 
> 
> -- 
> 松葉 史剛 (Fumitaka MATSUBA)
> 京都大学大学院 理学研究科 地球惑星科学専攻
> 地球物理学教室 気象学研究室 M2
> E-mail: matsuba@xxxxxxxxxxxxxxxxxx

堀之内 武
北海道大学 地球環境科学研究院 地球圏科学部門
〒060-0810 札幌市北区北10条西5丁目