Fortran中的随机数组/矩阵初始化

Maa*_*ndt 2 random fortran matrix fortran95

有没有办法在不使用显式do循环的情况下初始化随机数组?

现在我的随机矩阵初始化看起来像

program Main
    implicit none
    save

    integer :: seed, i, j
    real :: x
    character(100) :: option
    real, dimension(10,10) :: matrix

    if (iargc() > 0) then
        CALL GETARG(1,option)
        read(option,*) seed
    else
        seed = 1
    end if 

    call RANDOM_SEED(seed)

    do i=1,10
        do j=1,10
            call RANDOM_NUMBER(x)
            matrix(i,j) = x
        end do
    end do
end program
Run Code Online (Sandbox Code Playgroud)

但是如果可能的话,我希望它更像是隐含的do-loop数组初始化:

program Main
    implicit none
    save

    integer :: seed
    character(100) :: option
    real, dimension(10,10) :: matrix

    if (iargc() > 0) then
        CALL GETARG(1,option)
        read(option,*) seed
    else
        seed = 5
    end if 

    call RANDOM_SEED(seed)

    matrix = reshape((/ ((call RANDOM_NUMBER()), i=1,100) /), shape(matrix))
end program
Run Code Online (Sandbox Code Playgroud)

有没有什么方法可以使用Fortran 95这样的东西?

Vla*_*r F 14

为什么不

call RANDOM_NUMBER(matrix)

  • 因为这样未来的人们可以通过自己喜欢的搜索引擎更轻松地找到答案. (8认同)
  • +1或者,或许,正如人们可能会说的那样,为什么不阅读Fortran手册呢? (5认同)