2012-05-16 60 views
0

我有一個具有特定行數和列數的掩碼。 我想只讀取包含例如1的(i,j)組件。 然後一旦找到具有1的(i,j)組件,執行四個不同的動作,如果任何(i + 1,j), (ii,j),(i,j + 1),(i,j-1)等於1。根據Fortran中的掩碼讀取

希望這是明確的。 歡迎任何建議。 謝謝。

回答

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不一定是使用最快的構造,我們可以辯論使用它的優雅性和可讀性,而不是一系列循環,但我們不要。