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

1 次查看(过去 30 天)
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.

采纳的回答

Jon
Jon 2022-8-3
编辑:Jon 2022-8-3
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
  3 个评论
Jon
Jon 2022-8-3
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.

请先登录,再进行评论。

更多回答(2 个)

Torsten
Torsten 2022-8-3
编辑:Torsten 2022-8-3
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
David Hill 2022-8-3
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

类别

Help CenterFile Exchange 中查找有关 Introduction to Installation and Licensing 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by