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

[dennou-ruby:000134] Re: reading binary files



中島です。
 
堀之内> ごめんなさい。もうちょい具体的にお願いします。

すみません。あまり良く考えないで言ってますんで、
適当に割り引いて読んで下さい。

ごとけん> それもありますが、多次元配列は行列ではないので積をどう定義す
ごとけん> るかに、かなりの自由度があるのが悩みですね。
ごとけん> 
ごとけん> ある程度、programmable にする必要はありますが、universalなも
ごとけん> のを目指すと要素ごとになってしまうのが難しい。そんなわけでよ
ごとけん> く使うものを挙げて下さると助かります。いくつか挙げてもらえる
ごとけん> と傾向を分析することで実用上困らない程度には汎用性を持ったや
ごとけん> りかたを思い付くかも知れません。

たとえば、2次元平面の Laplacian を計算する際に:

  d^{2}f/dx^{2} +  d^{2}f/dy^{2} 

〜 ( f(ix+1,iy) + f(ix-1,iy) + f(ix,iy+1) + f(ix,iy-1) 
     - 4 * f(ix,iy) ) / dx^{2}

という計算が出て来ます。
2次元データ f(ix,iy) といっても、メモリ上では1次元的に並んでいる
わけで(Fortran なら (ix,iy) は ix + nx*(iy-1) 番目)、f をメモリ上の
順番でずらずら縦に並べると、上の演算は、1/dx^{2} と -4/dx^{2} が
ぱらぱらと散在し残りのほとんどの要素がゼロである様な
正方行列を左から掛ける線形演算になります。

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

球面座標やら何やらでは、metric が一様でないなどの事情で、
1 と 4 では済まなくなるので、面倒です。
この場合:
  ・必要な近傍演算から対応する sparse matrix を生成する。
  ・実際の演算は  sparse matrix のかけ算(普通の線形代数の意味で)
の二段階をふむことになりそう。
というわけで、後半部分の sparse matrix のかけ算は、汎用的
ツールとして用意しておく価値があるかな、と思ったわけです。
(ただし、前半部分がうまく作れないと、「使いにくい」となる。)

でも、どうせこのへんの話は沼さんあたりがすでに検討している様な
気がしますねえ。いかがでしょう?

ともあれ、「隣接要素を返す」というか、
「指定した座標軸方向にデータをシフトする演算」だけは、
本当に最低限必要だと思います。

-- 
 中島健介@九州大学 大学院理学研究科 地球惑星科学専攻 
           流体圏科学大講座  地球流体力学
 〒812-8581 福岡市 東区 箱崎 6-10-1
 ken-suke@xxxxxx
 Tel   : 092-642-2682    fax : 092-642-2685