How to generate a new array from if statement embedded in for loop

조회 수: 14 (최근 30일)
Iuliia Myrgorodska
Iuliia Myrgorodska 2020년 5월 2일
답변: Reshma Nerella 2020년 7월 24일
Hi MATLAB community,
I have a problem when I am trying to generate a new data array by processing it with an if statment embeded in a for loop.
Some backgroung: I have a cell array {181 x 1}, each of sub-cell arrays has a size 3059 x 5, double. Where 1st column is time point, 2nd cloumn is x_point, and column 5 is intensity.
I have created a separate array where I can set the intensity treshold. For instance it is column 5*0.8
I would like to generate a new data array that would contain only two columns x_point, and time_point that coreesponds to the time when value in the column 5 has droped bellow the intensity treshold. So this would be a new array with the size 3059 x 2.
I have tried to do that by embeding an if statement into for loop with the following code
Cellarray = accumarray(data(:,1),(1:size(data,1)),[],@(x){data(x,:)});
% Set the drop in intesity. If the intesity droped by 20% the intensity drop
% would be 0.2
Intensity_drop=0.2;
%Calculate intesity treashold for the first set of cells
Intensity_treshold=[Cellarray{1,1}(:,5)]*(1-Intensity_drop);
%number of pcells
numbpcells=numel(Intensity_treshold);
%number of time frames
time_frames=numel(Cellarray);
for k=1:time_frames
for i=1:numbpcells
if Cellarray{k,1}(i,5)<=Intensity_treshold(i)
N=[Cellarray{k,1}(i,2),k];
break
else
return
end
end
end
I was expecting it to run trough all the iterations until it gets to the value which is bellow treshold, and then diplay the data in a form of new array N. But this did not happen. Or at least Idid not get any N data as a return.
Could you sudgest what I did wrong, or is there another way to obtain the data set I am after.
I would be really greatfull,
  댓글 수: 2
darova
darova 2020년 5월 2일
return means end of script execution. Try without it
Iuliia Myrgorodska
Iuliia Myrgorodska 2020년 5월 2일
I've tried to delete this part
break
else
return
end
It gave me N a 1 x2 array from the very last itteration
If I put
N{i}=[Cellarray{k,1}(i,2),k];
It also wouldn't work the way it should
Basicaly I the loop to stop once it hit the number bellow trreshold, the way this data set is built the data after this point will be bellow treshold as well so they would owerite the original value, and therefore the I would get only the last time point, while the data I am trying to acces are the time point when the value droped bellow treshold for the very first time

댓글을 달려면 로그인하십시오.

답변 (1개)

Reshma Nerella
Reshma Nerella 2020년 7월 24일
Hi,
I understand that you want to terminate the execution of both inner and outer loops once the condition is satisfied. It can be done using a variable.
status = 1; % initialising a variable
for k=1:time_frames
for i=1:numbpcells
if Cellarray{k,1}(i,5)<=Intensity_treshold(i)
N=[Cellarray{k,1}(i,2),k];
status = 0; % required condition is met
end
if status == 0
break % break inner for loop
end
end
if status == 0
break % break outer for loop
end
end

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by