Fortran中的随机数组/矩阵初始化 [英] Random array / matrix intitialisation in Fortran
本文介绍了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屋!
查看全文