# Hello, I need help with: Replace elements in Vector A with those of vector B of the same position, only if they meet a certain condition, otherwise replace by a zero. Thanks

2 views (last 30 days)
MuluMe on 3 Aug 2022
Commented: Jon on 3 Aug 2022
I have Vectors A and B of the same length and a threshhold value:
Threshold = 4;
A = [3 7 1 3 10 3 4 1 5 5];
B = [5 3 6 1 6 3 5 4 9 4];
I want replace all values in A that are greater than threshold (A > Threshold) with values in B if they are less than the threshold (B < Threshold), otherwise make them zeros. In thi case, the new vector of A should be:
Thank you.
MuluMe on 3 Aug 2022
Am so grateful team, for your brilliant ideas. They have worked.

Jon on 3 Aug 2022
Edited: Jon on 3 Aug 2022
I like @Torsten's one liner and use of the multiplication times the logical zeros to null out the values where B is greater than the threshold. Alternatively, you could do it like this in two lines and the logic is a little more obvious
Threshold = 4;
A = [3 7 1 3 10 3 4 1 5 5];
B = [5 3 6 1 6 3 5 4 9 4];
A(A>Threshold) = B(A>Threshold)
A = 1×10
3 3 1 3 6 3 4 1 9 4
A(A>Threshold) = 0 % in case any of the B's we put in are over the threshold set them to zero
A = 1×10
3 3 1 3 0 3 4 1 0 4
Jon on 3 Aug 2022
Thanks for accepting my answer, but I think actually @Torsten approach looks the closest to what you describe. I think you can click on the accepted answer and change it if you want.

Torsten on 3 Aug 2022
Edited: Torsten on 3 Aug 2022
I kept the values in A unchanged that are less or equal to Threshold. If you also want to replace them by 0, take David's answer.
Threshold = 4;
A = [3 7 1 3 10 3 4 1 5 5];
B = [5 3 6 1 6 3 5 4 9 4];
A(A>Threshold) = B(A>Threshold).*(B(A>Threshold) < Threshold)
A = 1×10
3 3 1 3 0 3 4 1 0 0

David Hill on 3 Aug 2022
t=4;
A = [3 7 1 3 10 3 4 1 5 5];
B = [5 3 6 1 6 3 5 4 9 4];
idx=A>t&B<t;
A(idx)=B(idx);
A(~idx)=0
A = 1×10
0 3 0 0 0 0 0 0 0 0