[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dennou-ruby:003945] Re: __shape_matching のバグ
- To: dennou-ruby@xxxxxxxxxxx
- Subject: [dennou-ruby:003945] Re: __shape_matching のバグ
- From: Takeshi Horinouchi <horinout@xxxxxxxxxxxxxxxxx>
- Date: Thu, 16 Jun 2016 11:56:00 +0900
ありがとうございます。確かに辿りつけないとだめですね。
あとで確認します。堀之内
> 電脳 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丁目