How do I index individual columns in an array?

26 ビュー (過去 30 日間)
lil brain
lil brain 2022 年 7 月 22 日
コメント済み: Voss 2022 年 7 月 23 日
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
Voss 2022 年 7 月 22 日
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 件のコメント
lil brain
lil brain 2022 年 7 月 23 日
I am just curious because I used the approach in your answer but I am wondering if it also works using logicals?
Voss
Voss 2022 年 7 月 23 日
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

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeLoops and Conditional Statements についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by