生成满足条件的(x,y)点的随机列表?

时间:2015-05-13 14:06:41

标签: matlab random 2d

所以我需要生成一个x和y点的矩阵,因为它们符合这些(x,y)点浓度大于10的条件。注意我首先运行一个代码,让我在每个位置集中注意力,现在我需要Matlab来随机地#34;用上述条件选择(x,y)点。

非常感谢有关如何解决这个问题的任何建议。

2 个答案:

答案 0 :(得分:1)

假设您的数据如下所示:

data= [...  x  y  concentration
            1, 1, 1; ...
            2, 1, 11; ...
            1, 2, 12; ...
            2, 2, 1 ...
    ]

你可以找到大于10的所有浓度:

data_cbigger10=data(data(:,3)>10,:) % using logical indexing 

并从中选择随机点:

randomPoint=data_cbigger10(ceil(size(data_cbigger10,2)*rand),:) % pick a random index

如果尺寸如下:

  

浓度维数为52x61x61,浓度为c(x,y,时间),x的浓度为1x61,y为1x52。 @PetrH - s2015

这应该可以解决问题:

这是你的数据,我只是做点什么:

x=linspace(0,1,61);
y=linspace(0,1,52);
con=20*rand(61,52);

现在我发现con中的所有位置都大于10.这导致逻辑矩阵。通过将其与相同大小的随机矩阵相乘,我得到一个具有随机值的矩阵,其中'con'大于10,但其他地方等于零。

data_cbigger10=rand(size(con)).*(con>10);

通过查找max或min,Value选择一个随机点:

for n=1:1:10
    data_cbigger10=rand(size(con)).*(con>10);

    [vals,xind]=max(data_cbigger10);
    xind=squeeze(xind);
    [vals,yind]=max(squeeze(vals));
    [~,time_ind]=max(squeeze(vals));

    yind=yind(time_ind);
    xind=xind(yind,time_ind);
    x_res(n)=x(xind)
    y_res(n)=y(yind)
    time_res(n)=time(time_ind)
    con_res(n)=con(xind,yind,time_ind)
    con(xind,yind,time_ind)=0; % setting the choosen point to zero, so it will not be choosen again.
end

希望现在适合你。

答案 1 :(得分:0)

假设您拥有存储在数组(x,y)中的每个点concentration的浓度,您可以使用find()randsample()函数,如下所示:

conGT10 = find(concentration>10);    % find where concentration is greater than 10 (gives you indices)
randomPoints = randsample(conGT10,nn);    % choose nn random numbers from those that satisfy the condition
x1 = x(randomPoints);     % given the randomly drawn indices pull the corresponding numbers for x and y
y1 = y(randomPoints);

修改 以上假设数组xyconcentration1d且长度相同。显然这对你的问题不是这样。

您在(x,y)平面上有一个点网格,您可以在不同的时间段内测量此网格上的浓度。因此x的长度为nxy的长度为nyconcentration的大小为nx {{1} ny。为简单起见,我假设您仅测量浓度一次,即nt且浓度仅为nt=1数组。

我之前回答的修改版本如下:

2d