Случайная выборка по сеточным данным: как реализовать это в Matlab? - PullRequest
2 голосов
/ 03 мая 2011

У меня есть 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?

Ответы [ 2 ]

2 голосов
/ 03 мая 2011

Построение из моего ответа на ваш более простой вопрос , вот решение для того, как вы можете выбрать 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.Если на самом деле все наоборот, поменяйте второй и третий входы на функцию SUB2IND .

1 голос
/ 03 мая 2011

Я думаю, что йода уже дал основную идею.Вызовите randi дважды, чтобы заменить координату сетки, а затем замените ее соответствующим значением.Сделайте это 15 раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...