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

3 Ansichten (letzte 30 Tage)
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?

Akzeptierte Antwort

Azzi Abdelmalek
Azzi Abdelmalek am 14 Feb. 2014
Bearbeitet: Azzi Abdelmalek am 14 Feb. 2014
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

Weitere Antworten (2)

Jos (10584)
Jos (10584) am 18 Feb. 2014
The easy way:
A([1 3 4],:) = min(A([1 3 4],:),3) ;
A([2 5],:) = min(A([2 5],:),2) ;

Thomas
Thomas am 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.. ;)

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by