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。如果实际上是相反的,则将第二个和第三个输入交换到函数SUB2IND

于 2011-05-03T19:58:30.283 回答
1

我认为尤达已经给出了基本的想法。调用randi两次获取要替换的网格坐标,然后用合适的值替换。这样做15次。

于 2011-05-03T18:30:39.843 回答