Инициализация случайного массива/матрицы в Fortran

Есть ли способ инициализировать случайный массив без использования явных циклов?

Прямо сейчас инициализация моей случайной матрицы выглядит так

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

Но, если возможно, я бы хотел, чтобы это было больше похоже на подразумеваемую инициализацию массива 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

Возможно ли что-то подобное с Fortran 95?


person Maarten Dhondt    schedule 25.03.2014    source источник


Ответы (1)


Почему нет

call RANDOM_NUMBER(matrix) ?

person Vladimir F    schedule 25.03.2014
comment
+1 Или, как можно было бы иначе сказать, почему бы не прочитать руководство по Фортрану? - person High Performance Mark; 25.03.2014
comment
Потому что таким образом будущим людям будет легче найти ответ через свою любимую поисковую систему. - person Mark; 31.05.2016