How do I index individual columns in an array?

51 vues (au cours des 30 derniers jours)
lil brain
lil brain le 22 Juil 2022
Commenté : Voss le 23 Juil 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!

Réponse acceptée

Voss
Voss le 22 Juil 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 commentaires
lil brain
lil brain le 23 Juil 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 le 23 Juil 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

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Matrix Indexing dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by