0

特定の数の行と列を持つマスクがあります。たとえば 1 を含む (i,j) コンポーネントだけを読みたいと思います。次に、1 を含む (i,j) コンポーネントが見つかったら、(i+1,j),(ii ,j),(i,j+1),(i,j-1) が 1 に等しいことがわかります。

これが明確であることを願っています。どんなアドバイスでも大歓迎です。ありがとう。

4

1 に答える 1

1

マスクを次のようにします。

integer, dimension(1:r,1:c) :: mask

次に、次のフラグメントが正しい方向を示しているはずです。

forall (i=1:r, j=1:c, mask(i,j)==1)
   if ( mask(i-1,j)==1) then
      ! do the right thing
   else if ( mask(i+1,j)==1) then
      ! I hope you get the picture now
...

+/- i/j配列の境界の外に出る というエッジケースに対処するのはあなたに任せます。forallは必ずしも最速の構文であるとは限りません。ループのシーケンスではなく、それを使用することの優雅さと可読性について議論することもできますが、そうではありません。

于 2012-05-16T08:37:43.123 に答える