0

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

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

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

然后我想重复执行此操作,并且我不希望我的随机点在(假设)10 个半径节点的阈值后重复,甚至不希望彼此靠近。该矩阵是欧拉二维矩阵 (y,x)。

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

谢谢你们!

阿尔伯特 P

4

1 回答 1

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()

当然,只要 asfunc返回标量或 100x100 数组。

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

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

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

于 2013-01-31T15:19:27.170 回答