0

2D マトリックスのインデックス番号を取得する関数または方法を探しています。

私の例は、A(Ly,Lx) で、Ly = 100 および Lx = 100 です。

次のような行列のランダムなインデックス番号を取得したい: Random_node(A) = (random y, random x)

次に、半径の 10 ノードのしきい値に従って、ランダムなポイントを繰り返したり、互いに近づけたりしたくないという制約を持って、これを繰り返し実行したいと考えています。行列はオイラー 2D 行列 (y,x) です。

少なくとも最初の質問は簡単ですか?

皆さん、ありがとうございました!

アルバート・P

4

1 に答える 1

2

100x100 マトリックスでランダムな場所のセットを取得する 1 つの方法を次に示します。まず、実数の 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 のブロックに分割し、各ブロックで 1 つの要素をランダムに選択できます。それはあなたの制約の間の良い妥協でしょうか?

于 2013-01-31T15:19:27.170 に答える