Fortran中的随机数组/矩阵初始化 [英] Random array / matrix intitialisation in Fortran

查看:522
本文介绍了Fortran中的随机数组/矩阵初始化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



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

 程序主
隐含无
保存

整数:: seed,i,j
real :: x
character(100):: option
real,dimension(10,10):: matrix
$ b $ 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循环数组初始化:

 程序Main 
隐式无
保存

整数::种子
字符(100): :选项
实数,维(10,10)::矩阵

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

调用RANDOM_SEED(seed)

matrix = reshape((/((调用RANDOM_NUMBER()),i = 1,100)/),shape(矩阵))
结束程序

有没有什么办法能像Fortran 95那样做?

解决方案

为什么不

调用RANDOM_NUMBER(matrix)

Is there a way to initialise a random array without using explicit do-loops?

Right now my random matrix initialisation looks like

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

But if possible I'd like it to be more along the lines of an implied do-loop array initialisation:

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

Is there any way something like this would be possible with Fortran 95?

解决方案

Why not

call RANDOM_NUMBER(matrix) ?

这篇关于Fortran中的随机数组/矩阵初始化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆