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

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



堀之内です。

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

配列の次元に cyclic かどうかというのを定義したいというわけですか。
この例は長さ 10 の1次元配列についてですね。Arrayクラスでは 
a[-1]は a[9] になるけど、a[19]はエラー(nil)ですね。それをサイク
リックな場合 nil でなくしたいと。 (サイクリックでないと a[-1] を
使えなくしたいというのはちょっと...)

もともと多次元のものを1次元にする場合、サイクリック引用は不自然
だから禁止すべきでしょう。つまり 10x10 配列で a[199] は nil。た
だ、これだともとが一次元配列の場合だけサイクリック引用が許される
のが気持ち悪いですかね。

>> このあたりもっと気持良く行くには,アクセス方法を変えて,
>> 
>>        a.oned[0]    <==>    a[0,0]

そんな感じもありですかね。"oned" の文字を見てでサブセット指定と
分かるから、無理せず a.oned()でもいいのでは?

>> idx=p.where{|i| i>0}    
>> self[idx]=self[idx]*(p[ idx+[0,1,0] ]/p[idx])**K
>> 
>> なんてことができたほうがうれしいですね
>> (2次元めをひとつずらしたものを扱う).

ですね。
ただ、この例に関して言うと、非サイクリックの場合端っこが含まれる
とエラー(nil) になりますね。

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

この場合、shift の定義さえはっきりさせておけば、端っこ問題はプロ
グラマーがリスクを追うというのでいいでしょうか。勿論この場合 idx 
はベクトルでも問題無いですね。


堀之内 武                 horinout@xxxxxx
京都大学超高層電波研究センター    611-0011 宇治市五ヶ庄
phone:0774-38-3812                     fax:0774-31-8463