2015-06-25 50 views
1

我有兩個Fortran陣列的2維和3維,比如a(nx,ny)和b(nx,ny,nz)。在數組a中,我需要找出滿足的點,比方說值大於0.然後,我需要找出數組b中具有與a中那些滿足點的x和y相同索引的向量。什麼是最簡單快捷的方法呢?這兩個數組很大,我不想通過一個元素搜索一個元素。希望我明確解釋我的問題!謝謝!有效的方法來記住兩個大型數組的索引

+0

沒有信譽把FORTRAN標籤 – apple

+0

[標籤:FORTRAN]是一個已經現有標籤。你不應該需要任何特殊的聲望級別來在你自己的問題上使用它。您也不需要任何聲譽來編輯自己的問題,因此您應該可以添加它。 –

+0

你需要知道所有的指數,還是隻需要在這些指數上對B進行一些操作? – casey

回答

0

我不知道這是最好的方法,但這裏是我會做:

將一個where子句do環比z值內。你可以先得到有效索引的2D地圖成一個邏輯陣列,如果你不想每次都重新計算幾點:

program indices 
    implicit none 
    integer, parameter :: nx = 3000, ny = 400, nz = 500 
    integer, dimension(nx, ny) :: a 
    integer, dimension(nx, ny, nz) :: b 
    logical, dimension(nx, ny) :: valid_points 

    integer :: x, y, z 

    do y = 1, ny 
     do x = 1, nx 
      a(x, y) = x - y 
     end do 
    end do 

    valid_points = (a > 0) 

    do z = 1, nz 
     where(valid_points) 
      b(:, :, z) = z 
     else where 
      b(:, :, z) = 0 
     end where 
    end do 

end program indices 
+0

適用於小陣列。測試真實案例。非常感謝! – apple

+0

不要使用臨時邏輯數組,這是多餘的,並且編譯器可以輕鬆處理沒有額外內存的inline語句。 – zeroth

相關問題