How to replace some column values ​​depending on the condition?

I have a matrix A such that

 A= 4.0000 120.0000 92.0000 0 0 37.6000 0.1910 30.0000 10.0000 168.0000 74.0000 0 0 38.0000 0.5370 34.0000 10.0000 139.0000 80.0000 0 0 27.1000 1.4410 57.0000 1.0000 139.0000 60.0000 23.0000 846.0000 30.1000 0.3980 59.0000 5.0000 136.0000 72.0000 19.0000 175.0000 25.8000 0.5870 51.0000 7.0000 121.0000 0 0 0 30.0000 0.4840 32.0000 

I want to do two things:

  • Replace the values ​​of the first column that are greater than 5 with 0.
  • In the second column, if the values ​​are in the range 121-130, replace them with 0. If they are in the range 131-140, replace them with 1, 141-150 by 2, 151-160 by 3, etc.

So, the desired result matrix:

 A= 4.0000 0.0000 92.0000 0 0 37.6000 0.1910 30.0000 0.0000 4.0000 74.0000 0 0 38.0000 0.5370 34.0000 0.0000 1.0000 80.0000 0 0 27.1000 1.4410 57.0000 1.0000 1.0000 60.0000 23.0000 846.0000 30.1000 0.3980 59.0000 5.0000 1.0000 72.0000 19.0000 175.0000 25.8000 0.5870 51.0000 0.0000 0.0000 0 0 0 30.0000 0.4840 32.0000 

How can i do this?

I tried something like this:

 counter=1; for i = 1: rows if A(i,1) > 5 A(i ,1) = 0; end if A(i,2) > 120 && A(i,2) < 130 A(i ,2) = 0; end counter = counter+1; end 

Does the case use a trick?

+7
source share
1 answer

You can change the first 2 columns of A as follows:

 A(A(:,1) > 5,1) = 0; %# Set values in column 1 greater than 5 to 0 A(:,2) = fix((A(:,2)-121)./10); %# If the values in column 2 are all 120 or %# greater you can shift, scale, then round %# them towards 0 to get the new values 

The above uses matrix indexing and vectorized operations to avoid loops or case statements.

+11
source

All Articles