предполагая, ваши данные выглядит примерно так:
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
Если размеры таковы:
the dimension of concentration is 52x61x61 as concentration is c(x,y,time), that of x is 1x61 and 1x52 for y. @PetrH – s2015
это должно сделать трюк:
Это ваши данные, я просто сделать что-то:
x=linspace(0,1,61);
y=linspace(0,1,52);
con=20*rand(61,52);
Теперь я нахожу все позиции в кон которые больше 10. Это приводит к логической матрице. Умножая его на случайную матрицу того же размера, я получаю матрицу со случайными значениями, где «con» больше 10, но везде равно нулю.
data_cbigger10=rand(size(con)).*(con>10);
нахождением макс или мин, значение случайной точки выбрали:
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
Надежда это теперь работает для вас.
@macro Это работает, но я получаю только 1D данные. Моя концентрация изменяется как с направлениями x, так и с, c (i, j), поэтому в конце мне нужны 2D-данные. Любая идея, как я могу генерировать то же самое для x (i) и y (j)? Благодаря! – s2015
«randomPoint» должен быть вектором [1x3] с «x = randomPoint (1)», «y = randomPoint (2)» и «концентрация = randomPoint (3)». Попробуйте еще раз, исправив ошибку: «randomPoint = ** data_cbigger10 ** (round (size (data_cbigger10,2) * rand), :) ' –
" randomPoint = ** data_cbigger10 ** (round (size (data_cbigger10,2) * rand), :) «Должен ли я удалить« ** »? В любом случае, когда я запускаю:« randomPoint = data_cbigger10 (round (size (data_cbigger10,2) * rand), :) «Я получаю следующую ошибку:« Индекс превышает размеры матрицы. "@marco – s2015