How do I index individual columns in an array?

4 views (last 30 days)
lil brain on 22 Jul 2022
Commented: Voss on 23 Jul 2022
Hi,
I have a fairly basic question that I cant seem to solve.
I have an array "high_perspective_taking" which has values from 0-4. I would like to write a for loop that goes through all the rows of columns 1 and 4 in order to change all the 4's to 0's, 3's to 1's, 1's to 3's, and 0's to 4's.
I have the following for loop but I am struggling on how to index both column 1 and column 4.
for p = 1:length(high_perspective_taking)
if high_perspective_taking(p,[1 4])== 0;
high_perspective_taking(p,[1 4])= 4;
end
if high_perspective_taking(p,[1 4])== 1;
high_perspective_taking(p,[1 4])= 3;
end
if high_perspective_taking(p,[1 4])== 3;
high_perspective_taking(p,[1 4])= 1;
end
if high_perspective_taking(p,[1 4])== 4;
high_perspective_taking(p,[1 4])= 0;
end
end
Thank you!

Voss on 22 Jul 2022
% original:
high_perspective_taking
high_perspective_taking = 19×7
2 3 2 1 0 1 3 1 2 3 3 2 3 3 3 0 1 4 2 0 4 3 2 3 4 1 1 3 0 4 3 1 0 4 3 1 3 2 1 2 1 2 2 2 4 0 2 2 0 1 1 1 3 2 1 2 4 3 3 3 1 1 2 3 2 1 2 2 1 1
% 0 <-> 4, 1 <-> 3:
high_perspective_taking(:,[1 4]) = 4 - high_perspective_taking(:,[1 4])
high_perspective_taking = 19×7
2 3 2 3 0 1 3 3 2 3 1 2 3 3 1 0 1 0 2 0 4 1 2 3 0 1 1 3 4 4 3 3 0 4 3 3 3 2 3 2 1 2 2 2 4 4 2 2 0 3 1 1 1 2 1 2 0 3 3 1 1 1 2 1 2 1 2 2 1 1
Voss on 23 Jul 2022
Well, if you're stil wanting to swap 0s with 4s and 1s with 3s, I would still use the approach in my answer, i.e.:
high_perspective_taking(:,[1 4]) = 4 - high_perspective_taking(:,[1 4])
In my comment I wanted to show a more general approach to swapping values where the relation was not necessarily as simple as x = 4-x, but you're right I neglected to show how to apply that approach only to certain columns.
Probably the easiest way would be to create a temporary variable containing just the relevant columns, then do the swapping in that variable, then assign back to the original variable. For example:
% a matrix where 0s and 4s in columns 1 and 4 will be swapped:
A = [0 0 0 0; 0 1 2 3; 1 2 3 4; 4 4 4 4]
A = 4×4
0 0 0 0 0 1 2 3 1 2 3 4 4 4 4 4
% temporary variable containing just columns 1 and 4 of A:
A14 = A(:,[1 4]);
% swap 0s and 4s in A14:
A14_is_zero = A14 == 0;
A14_is_four = A14 == 4;
A14(A14_is_zero) = 4;
A14(A14_is_four) = 0;
% assign back to A:
A(:,[1 4]) = A14
A = 4×4
4 0 0 4 4 1 2 3 1 2 3 0 0 4 4 0