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

[dennou-ruby:000081] Re: gtrb & multi-D array



沼口です.

 > 問題はないと思います。
 >   1. 一次元配列   「一次元扱い」と「多次元」扱いが一致するので問題無い
 >   2.2次元以上   例えば 10x10 の2次元配列を考えると

ええ,それはわります.問題は,1次元の場合と2次元の場合で考え方が
異なるのがちょっと気持悪いかな..って程度.

a[19] とか a[-1] とか指定してした場合に,
もともとが1次元なら,この1次元目が cyclic な属性を持つか否かに
よって,a[9]を示すか,nil を示すかを判断したいのだけれど,
もともとが多次元なら,(それぞれの次元の cyclic 属性とは別に)
全体の添字が  cyclic な属性を持つか否かで判断しなければいけない,
という考え方の違いが.

このあたりもっと気持良く行くには,アクセス方法を変えて,

       a.oned[0]    <==>    a[0,0]
       a.oned[99]   <==>    a[9,9]
       a.oned[-1]   <==>    a[-1,-1] == a[9,9]
       a.oned[-2]   <==>    a[-2,-1] == a[8,9]

のようにすればいいでしょうか.でも,oned[] なんて名前のメソッドは
定義できないはず.でも,() より [] のほうがいいし,このために
下位クラスを作るべきでしょうか...(ひとりごとモード)

あと,

idx=p.where{|i| i>0}    
self[idx]=self[idx]*(p[ idx+[0,1,0] ]/p[idx])**K

なんてことができたほうがうれしいですね
(2次元めをひとつずらしたものを扱う).
この場合,idx はベクトルのほうがよい.

もちろん,
idx=p.where{|i| i>0}    
self[idx]=self[idx]*(p.shift(0,1,0)[idx]/p[idx])**K
でもいいのですが.これならidx がスカラーでも問題はないか..

-- 
沼口  敦@北海道大学大学院地球環境科学研究科 大気海洋圏環境科学専攻
tel:011-706-2365 fax:011-706-4865 〒060-0810 札幌市北区北10条西5丁目  
numa@xxxxxx