从矩阵得到随机索引号,fortran 90

时间:2013-01-31 14:15:25

标签: function random matrix repeat fortran90

我正在寻找一种函数或方法来获取2D矩阵的索引号:

我的例子是,我有A(Ly,Lx),其中Ly = 100且Lx = 100

我想获得矩阵的随机索引号,例如:Random_node(A)=(random y,random x)

然后我想重复做这个,我不希望我的随机点重复,甚至不要在一个(比如说)半径为10个节点的阈值之后彼此靠近。矩阵是欧拉2D矩阵(y,x)。

至少第一个问题是否直截了当?

谢谢大家!

Albert P

1 个答案:

答案 0 :(得分:2)

这是在100x100矩阵中获取一组随机位置的一种方法。首先,声明一个100x100的实数矩阵:

real, dimension(100,100) :: randarray

然后,将一个随机数放入该数组的每个元素

call random_number(randarray)

现在,表达式如

randarray > 0.9

返回一个逻辑数组,其中包含大约10%的真值和90%的假值。通过追踪真值的位置,您可以获得随机的x-es和y-es。实际上,您可能根本不需要找到这些位置,您可以简单地在蒙版赋值和类似操作中使用表达式,例如

where(randarray>0.9) a = func()

当然,func会返回标量或100x100数组。

这种方法可以保证每个位置都与其他位置不同。

但是,它没有解决您的约束,即“随机”位置不应该彼此太靠近。当然,这种约束与随机性有点不一致。

我想,您可以将100x100阵列分成10x10块,然后随机选择每个块中的一个元素。这会是你的约束之间的妥协吗?