我正在寻找一个函数或一种方法来获取二维矩阵的索引号:
我的例子是,我有 A(Ly,Lx) 其中 Ly = 100 和 Lx = 100
我想得到一个矩阵的随机索引号,如:Random_node(A) = (random y, random x)
然后我想重复执行此操作,并且我不希望我的随机点在(假设)10 个半径节点的阈值后重复,甚至不希望彼此靠近。该矩阵是欧拉二维矩阵 (y,x)。
至少第一个问题是直截了当的吗?
谢谢你们!
阿尔伯特 P
这是在 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()
当然,只要 asfunc
返回标量或 100x100 数组。
这种方法保证了每个位置都与其他位置不同。
但是,它并没有解决您的“随机”位置不应彼此太近的约束。当然,这种约束与随机性有点不一致。
我想,您可以将 100x100 数组分成 10x10 块,然后随机选择每个块中的一个元素。这会是你的约束之间的一个很好的妥协吗?