2

200x200グリッド データ ポイントがあります。15そのグリッドからランダムにグリッド ポイントを選択し、それらのグリッドの値を、以下に示す既知の分布から選択された値に置き換えたいと考えています。すべての15グリッド ポイントには、指定された分布からランダムな値が割り当てられます。

指定された分布は次のとおりです。

Given Distribution
314.52
1232.8
559.93
1541.4
264.2
1170.5
500.97
551.83
842.16
357.3
751.34
583.64
782.54
537.28
210.58
805.27
402.29
872.77
507.83
1595.1

指定された分布は20、それらのグリッド データ ポイントの一部である値から構成されます。これらの20グリッド ポイントは固定されています。つまり、ランダムに選択する15ポイントの一部であってはなりません。これらの20ポイントの座標は、固定されており、ランダム ピッキングの一部であってはなりません。

x   27  180 154 183 124 146 16  184 138 122 192 39  194 129 115 33  47  65  1   93
y   182 81  52  24  168 11  90  153 133 79  183 25  63  107 161 14  65  2   124 79

この問題を Matlab で実装する方法を教えてもらえますか?

4

2 に答える 2

2

あなたのより単純な質問に対する私の答えに基づいて、15 のランダムな整数ポイント (つまり、200 行 200 列の行列に添え字付きのインデックス) を選択し、上記の値のセットから抽出されたランダムな値を割り当てる方法の解決策を次に示します。

mat = [...];   %# Your 200-by-200 matrix
x = [...];     %# Your 20 x coordinates given above
y = [...];     %# Your 20 y coordinates given above
data = [...];  %# Your 20 data values given above
fixedPoints = [x(:) y(:)];         %# Your 20 points in one 20-by-2 matrix
randomPoints = randi(200,[15 2]);  %# A 15-by-2 matrix of random integers
isRepeated = ismember(randomPoints,fixedPoints,'rows');  %# Find repeated sets of
                                                         %#   coordinates
while any(isRepeated)
  randomPoints(isRepeated,:) = randi(200,[sum(isRepeated) 2]);  %# Create new
                                                                %#   coordinates
  isRepeated(isRepeated) = ismember(randomPoints(isRepeated,:),...
                                    fixedPoints,'rows');  %# Check the new
                                                          %#   coordinates
end
newValueIndex = randi(20,[1 15]);  %# Select 15 random indices into data
linearIndex = sub2ind([200 200],randomPoints(:,1),...
                      randomPoints(:,2));  %# Get a linear index into mat
mat(linearIndex) = data(newValueIndex);    %# Update the 15 points

x上記のコードでは、座標が行インデックスに対応し、y座標が列インデックスに対応すると仮定していますmat。実際に逆の場合は、2 番目と 3 番目の入力を関数SUB2INDに交換します。

于 2011-05-03T19:58:30.283 に答える
1

ヨーダはすでに基本的なアイデアを与えたと思います。randi を 2 回呼び出して、置き換えるグリッド座標を取得してから、適切な値に置き換えます。それを15回。

于 2011-05-03T18:30:39.843 に答える