Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
网格数据的随机抽样:如何在Matlab中实现?_Matlab_Datagrid_Distribution_Sampling_Random Sample - Fatal编程技术网

网格数据的随机抽样:如何在Matlab中实现?

网格数据的随机抽样:如何在Matlab中实现?,matlab,datagrid,distribution,sampling,random-sample,Matlab,Datagrid,Distribution,Sampling,Random Sample,我有一个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 给

我有一个
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中实现这个问题吗?

我想yoda已经给出了基本的想法。调用randi两次以获取要替换的栅格坐标,然后将其替换为适当的值。这样做15次。

在此基础上,您可以选择15个随机整数点(即200 x 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
中的列索引。如果实际情况正好相反,则将第二个和第三个输入交换到函数。

您的问题没有很好地表述,并且有两张选票作为非真实问题结束。从现在的阅读方式来看,它看起来也像是家庭作业,如果是这样的话,就标记为是。您可能希望查看
randi
函数,生成一个小于某个值的随机整数列表,以拾取点。此外,a的最大值为1。表中的这些值代表什么?起初我假设它们是柱状图上的垃圾箱计数,但也不可能是这些。如果你的意思是不同的CDF,那么你也应该解释一下。你不明白问题的哪一部分?我没有说给定的表是CDF。我说过CDF来自给定的值。我已经非常清楚地解释了这个问题,我不明白你所说的没有解释清楚的是什么。这不是家庭作业,而是我研究的一部分。顺便说一句,那些投票结束这个问题的人并不认为他们有正当的要求把这个问题标记为不是真正的问题。如果他们的担心是合法的和真实的,那么他们就会询问或质疑。我已经向你指出了1&2。我也解释了你问题的哪一部分不清楚。把你的语气调低一点,先读一下评论,可能会对你有好处。“说CDF来自这些值”毫无意义。如何从这些值中获得CDF?这些是原始的“频率”值吗?你应该按面积正常化吗?或者它们是在这些点上评估的实际CDF,但只是缩放,在这种情况下,您只需要将其缩小?什么都不清楚。如果你需要帮助,你必须向我们解释清楚,而不是你自己。好的,尤达。我重新编排了问题的格式,以便现在更容易理解。谢谢你指出这些疑问。