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:
So the desired result matrix would be:
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 accomplish this?
I was trying 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
Would using a case do the trick?
You can modify the first 2 columns of A
like so:
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 for loops or case statements.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With