我正在寻找一种函数或方法来获取2D矩阵的索引号:
我的例子是,我有A(Ly,Lx),其中Ly = 100且Lx = 100
我想获得矩阵的随机索引号,例如:Random_node(A)=(random y,random x)
然后我想重复做这个,我不希望我的随机点重复,甚至不要在一个(比如说)半径为10个节点的阈值之后彼此靠近。矩阵是欧拉2D矩阵(y,x)。
至少第一个问题是否直截了当?
谢谢大家!
Albert P
答案 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块,然后随机选择每个块中的一个元素。这会是你的约束之间的妥协吗?