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

[dennou-ruby:000133] Abstract NumArray



In message "[dennou-ruby:000130] Re: reading binary files"
    on 99/11/01, Takeshi Horinouchi <horinout@xxxxxx> writes:

>>> ある程度、programmable にする必要はありますが、universalなも
>>> のを目指すと要素ごとになってしまうのが難しい。
>
>地球科学関連というか連続体業界では、その「要素ごと」で定義するのが良
>いです。Fortran90とかでもそうなってます。

要素ごとの記述はオブジェクトであることを予感させない書き方を
Rubyでやるのが難しいのが難点だと思っています。ちょっとうまく
説明できないのですが…

たとえば、僕が考えているのは

ary.apply( NumArrayOperator::SQRT )

と書けば要素ごとの平方根を取った多次元配列が結果になるような
気分を醸し出せますが、この場合、NumArrayOperator::SQRT はあ
くまで演算子オブジェクトであって、メソッドではないのがミソで
す。このようにしておけば、sqrt(3) へのポインタを渡すという実
装が割と容易です、というか Ruby の API では構文木の情報は公
開されてないのでこういう書き方しか出来ないんじゃないかな。

また、演算子オブジェクト同士の演算としてに合成として積を用意
してやれば、ある程度 programmable に出来るんですが、条件分岐
くらいはないと不便そうなので、それをどう書くかとその実装を考
慮したいです。このばあい Ruby の条件分岐を使うと要素ごとにオ
ブジェクト化しなければならないので、if-then-else や大小比較
などは自前で演算子オブジェクトとして用意する必要があります。
しかしそこまでやる必要があるのか。

あと中島さんが指摘されたような近傍演算をどうやって導入するか
ですね。nearest neighbor の差は結構使うでしょうから導入する
のは妥当ですが、ある程度カスタマイズできる Laplacian も必要
なんかなぁ、しかしどこまで自由にすべきかってはが悩ましいです。

-- gotoken