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