Matrix +;1/-1随机分布在二维阵列中

Matrix +;1/-1随机分布在二维阵列中,matrix,random,fortran,Matrix,Random,Fortran,我想创建一个4x4数组,它只在fortran95中随机填充+1或-1。我发现了一个可以生成数字的帖子: program rand_test use,intrinsic :: ISO_Fortran_env real :: r(6) integer :: i(6) ! call init_random_seed() would go here call random_number(r) i = -1 + FLOOR(3*r) ! n=-1 and m=1 prin

我想创建一个4x4数组,它只在fortran95中随机填充+1或-1。我发现了一个可以生成数字的帖子:

program rand_test
use,intrinsic :: ISO_Fortran_env
real  :: r(6)
integer       :: i(6)

! call init_random_seed() would go here

call random_number(r)

i = -1 + FLOOR(3*r)       ! n=-1 and m=1

print *, i
end program

但是,这包括我不想要的0。是否可以删除0,如果可以,如何删除?

对于数组中的每个元素,随机生成0或1,乘以2,减去1。

对于数组中的每个元素,随机生成0或1,乘以2,减去1。

这基本上是@Andrew Morton建议的。下面是实现所需功能的代码

program test_rand
implicit none

real  ::r(4,4)
integer       :: i(4,4)

! call init_random_seed() would go here

call random_number(r)

i = nint(r)*2-1       ! n=-1 and m=1

print *, i
end program

这基本上就是@Andrew Morton所建议的。下面是实现所需功能的代码

program test_rand
implicit none

real  ::r(4,4)
integer       :: i(4,4)

! call init_random_seed() would go here

call random_number(r)

i = nint(r)*2-1       ! n=-1 and m=1

print *, i
end program

谢谢,但我不想要零。。。我对编码是新手,我不太明白你在说什么…(0或1)*2=(0或2)。(0或2)-1=(-1或1)。@Andrew Morton非常感谢你。谢谢,但我不想要零。。。我对编码是新手,我不太明白你在说什么…(0或1)*2=(0或2)。(0或2)-1=(-1或1)。@Andrew Morton非常感谢您。使用
use,injective::…
这不是Fortran 95代码。这就是说,该模块中没有使用任何内容,所以如果您确实需要F95,可以愉快地删除该行。使用
use,infrant:…
这不是Fortran 95代码。这就是说,该模块中并没有使用任何东西,所以若您确实需要F95,可以愉快地删除该行。