0
我有一個具有特定行數和列數的掩碼。 我想只讀取包含例如1的(i,j)組件。 然後一旦找到具有1的(i,j)組件,執行四個不同的動作,如果任何(i + 1,j), (ii,j),(i,j + 1),(i,j-1)等於1。根據Fortran中的掩碼讀取
希望這是明確的。 歡迎任何建議。 謝謝。
我有一個具有特定行數和列數的掩碼。 我想只讀取包含例如1的(i,j)組件。 然後一旦找到具有1的(i,j)組件,執行四個不同的動作,如果任何(i + 1,j), (ii,j),(i,j + 1),(i,j-1)等於1。根據Fortran中的掩碼讀取
希望這是明確的。 歡迎任何建議。 謝謝。
讓你的面具是這樣的:
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
不一定是使用最快的構造,我們可以辯論使用它的優雅性和可讀性,而不是一系列循環,但我們不要。