我有一个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中实现这个问题吗?
答案 0 :(得分:2)
建立my answer to your simpler question,这里有一个解决方案,你可以选择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 :(得分:1)
我认为尤达已经提出了基本想法。调用randi两次以获取要替换的网格坐标,然后将其替换为适当的值。这样做了15次。