所以我需要生成一个x和y点的矩阵,因为它们符合这些(x,y)点浓度大于10的条件。注意我首先运行一个代码,让我在每个位置集中注意力,现在我需要Matlab来随机地#34;用上述条件选择(x,y)点。
非常感谢有关如何解决这个问题的任何建议。
答案 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);
修改强>
以上假设数组x
,y
和concentration
为1d
且长度相同。显然这对你的问题不是这样。
您在(x,y)
平面上有一个点网格,您可以在不同的时间段内测量此网格上的浓度。因此x
的长度为nx
,y
的长度为ny
,concentration
的大小为nx
{{1} ny
。为简单起见,我假设您仅测量浓度一次,即nt
且浓度仅为nt=1
数组。
我之前回答的修改版本如下:
2d