# Storage of first few values in an array but with an if condition

1 view (last 30 days)
Sandip Ghatge on 18 May 2020
Edited: Sandip Ghatge on 21 May 2020
I am stuck here, because when i write the following code to take in values lesser than or equal to 0.20 and greater than or equal to 0.12, it takes all the values of the first column <= 0.20 and >=0.12. The desired result is taking in first set of values, lesser than or equal to 0.2 and greater than or equal to 0.12 and not all the values.
The code is,
A = [0.25;0.12;0.18;0.21;0.26;0.18;0.19;0.25;0.26;0.12;0.18;0.21];
B = [A(A(:,1) <= 0.20 & A(:,1) >= 0.12,1)];
The output of this is,
B =
0.1200
0.1800
0.1800
0.1900
0.1200
0.1800
What i am desiring is
B =
0.12
0.18
##### 2 CommentsShowHide 1 older comment
Sandip Ghatge on 18 May 2020
Thank you.
I am going through the command.

Rik on 18 May 2020
Edited: Rik on 18 May 2020
If you want to find the first block of true in L, you can use this code:
A = [0.25;0.12;0.18;0.21;0.26;0.18;0.19;0.25;0.26;0.12;0.18;0.21];
L=A(:,1) <= 0.20 & A(:,1) >= 0.12;
ind1=find(L,1);%first location within L
ind2=find(diff(L)==-1,1);%last location within L
if isempty(ind2),ind2=numel(A);
B=A(ind1:ind2)
Assuming you also wanted the 0.19:
A = [0.25;0.12;0.18;0.21;0.26;0.18;0.19;0.25;0.26;0.12;0.18;0.21];
L=A(:,1) <= 0.20 & A(:,1) >= 0.12;%put in a different variable for readability
B = A(L);
B=unique(B,'stable');%don't sort values
Sandip Ghatge on 18 May 2020
I cannot modify this code to exclude 0.19.
I just want a set when the values of the matrix A first get <= 0.20 and >=0.12, the moment it gets out of these limits(which is at A(4,1) here) the storage into a different matrix say B should stop.

Guillaume Le Goc on 18 May 2020
You could use the find function, where you can specify the first n elements you want :
A = [0.25;0.12;0.18;0.21;0.26;0.18;0.19;0.25;0.26;0.12;0.18;0.21];
ids = find(A<=0.2 & A>=0.12, 2); % second argument specifies you want only the first 2 elements that match the condition
B = A(ids);
Or directly :
A = [0.25;0.12;0.18;0.21;0.26;0.18;0.19;0.25;0.26;0.12;0.18;0.21];
B = A(find(A<=0.2 & A>=0.12, 2));
Sandip Ghatge on 21 May 2020
@Rik, I am sorry, i wanted to accept your answer, but by mistake i accepted this answer. Thanks for bringing it into notice. i am accepting your answer as it takes me to the closest what i was aiming for and also have learnt a new command.