有效的方法来记住两个大型数组的数组索引

时间:2015-06-25 20:28:03

标签: arrays fortran

我有2个和3个维度的两个Fortran数组,比如a(nx,ny)和b(nx,ny,nz)。在数组a中,我需要找出满意的点,比如值>然后,我需要在数组b中找到具有相同索引x和y的向量的a。什么是最简单快捷的方法?这两个数组很大,我不想一个元素搜索一个元素。希望我能清楚地解释我的问题!谢谢!

1 个答案:

答案 0 :(得分: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