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

[dennou-ruby:000435] Re: proto2c



堀之内さま


In message "[dennou-ruby:000431] Re: proto2c"
    on 00/10/31, Takeshi Horinouchi <horinout@xxxxxx> writes:
> > > えっと、場合によりますね、可能性としては
> > >   (1) Array
> > >   (2) NumArray 
> > >   (3) NumArray の Array
> > > の3パターンがありえるはずです。とりあえず一律Arrayにしましょう。
> > > 逆に(2)や(3)でないとおかしなDCL関数には何がありますか?
> > よくわからないのですが、普通に絵を書くぐらいは (1) で大丈夫
> > のような気がします。
> 
> 大丈夫ではあるのですが、今後主に使うのは NumArray というのが前提
> ですので、Array から始めるにしても NumArray には早めの対応して頂
> けると嬉しいです。なお、(3) は良く分からないのですが、必要ないよ
> うに思います。ところで、filterの中をまだ見てないので的外れなこと
> を言うかも知れませんが、実は NumArray に対応させるのが一番楽では
> ないですか。Arrayは何でも入れられますし、多次元にするには Array 
> の Array となりますよね。

そうなんです、NumArray だけに対応させたら楽なんです。しかし、
real * の意味するところが大量のデータばかりでなく、実数型の
パラメータ数個の場合は、

rpara1, rpara2, rpar3 = xxx( ... )
xxx( [rpara1,rpara2], .... )

と書いた方が楽そうなので、Array にも対応した方がいいような気
がしました。

多次元の場合ですが、NumArray も Array もオブジェクトから取り
出した C の配列は1次元で、そのまま cdcl に渡すようになって
います。だから、Array はその中身を n 次元だと思ってユーザが
データを作れば OK ですが、Array の Array だとエラーです。
(こんな時は、NumArray を使って下さい、ということですよね。)


少し気にしていることは、、、
proto2c は、今のところ関数の引数が配列の場合、その次元を意識
した作りになっていないのです。もし、NumArray の shape との整
合をチェックする必要があるなら、次元の情報を持たないといけま
せん。

例えば、NumArrayクラスの オブジェクト data が data.shape =>
(l, m, n) で、これを使って2次元配列が前提の等高線を書く場合

  udcntr(data, ... )

と指定したとき、ちょっと変な絵でも書いてくれた方がいいのか、

  udcntr(data[0, true, true], ... )

などと書くまでエラーになるほうがいいかです。どうでしょうか?
( やっぱり、チェックが必要な気がしてきました… )


最初の話で、real * をオブジェクトにして返す場合は、ユーザが
Array か NumArray どちらを期待しているのか判断するのが難しい
です。(1) の Array に統一すると、math2 ( math1 も?) を除けば
あまり問題なさそうだと思いました。
ただ proto2c としては、堀之内さんがおっしゃるように、NumArray
も返せるようにできる仕掛けが必要なのかもしれません。


川那辺さま:
C の配列とそのサイズから、NumArray オブジェクトを作る関数を
教えてもらえますか?よろしくお願いします。


黒井 啓子