MATLAB Answers

Tim
0

How to change Elements in Matrix per row depending on their size in reference to a particular Element (without loop)

Asked by Tim
on 14 Feb 2014
Latest activity Answered by Jos (10584)
on 18 Feb 2014
I've Data (in the real case much bigger) like this: A =
0 3 4 5 2 3 1
2 4 6 2 1 6 8
1 1 1 3 2 1 8
4 4 3 3 1 0 0
2 3 2 2 1 9 0
Not I want to change elements in different rows if they are bigger than a particular number: For example in Row 1,3,4 there should not be an Element bigger then 3 and in Row 2,5 there should not be an Element larger then 2.
So the Result should look like: A =
0 3 3 3 2 3 1
2 2 2 2 1 2 2
1 1 1 3 2 1 3
3 3 3 3 1 0 0
2 2 2 2 1 2 0
I tried to solve the Problem like this but it doesnt work:
A(A([1 3 4],:)>=3)=3
A(A([2 5],:)>=2)=2
Does someone have a good solution or does anyone know where my mistake is?

  0 Comments

Sign in to comment.

3 Answers

Answer by Azzi Abdelmalek
on 14 Feb 2014
Edited by Azzi Abdelmalek
on 14 Feb 2014
 Accepted Answer

B=A([ 1 3 4],:);
B(B>3)=3
A([1 3 4],:)=B
B=A([ 2 5],:);
B(B>2)=2
A([2 5],:)=B

Answer by Jos (10584)
on 18 Feb 2014

The easy way:
A([1 3 4],:) = min(A([1 3 4],:),3) ;
A([2 5],:) = min(A([2 5],:),2) ;

  0 Comments

Sign in to comment.


Answer by Thomas
on 14 Feb 2014

A laborious way of doing it..
B=[A(1,:);A(3,:);A(4,:)];
B(B >=3)=3;
C=[A(2,:);A(5,:)];
C(C >=2)=2;
Out=[B(1,:);C(1,:);B(2,:);B(3,:);C(2,:)]
Of course there are gonna be better ways of doing this.. ;)