How do I index individual columns in an array?

22 views (last 30 days)
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!

Accepted Answer

Voss
Voss on 22 Jul 2022
load high_perspective_taking.mat
% 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
  6 Comments
lil brain
lil brain on 23 Jul 2022
I am just curious because I used the approach in your answer but I am wondering if it also works using logicals?
Voss
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

Sign in to comment.

More Answers (0)

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!