for文について
21 views (last 30 days)
Show older comments
for文において下記のように書くと
for c=1:4
end
1~4までループさせる事が出来ると思います。
ですが、私は下記に書くように
for c=1:4 r=:1:4:40
end
cとrの二つのループを同じタイミングで進ませたいのですが何か方法はありますでしょうか?
0 Comments
Accepted Answer
Atsushi Ueno
on 30 Sep 2021
Edited: Atsushi Ueno
on 30 Sep 2021
C言語でいうところの下記のようなイメージだと想定します。
for(c=1,r=1; c <= 4; c++,r+=4)
; // % c=1,2,3,4 r=1,5,9,13 (40まではいかない)
@Janさんの回答の真ん中辺りで、MATLABのindexing仕様の良さに気付かされます。
cとrの二つのイテレータを一つの変数"iterator"にまとめてしまえば良いのです。
下記の様に書くと、iteratorはループを回る度に与えられた行列の各列を走査していきます。
for iterator = [1:1:4; 1:4:13]
c = iterator(1) % c=1,2,3,4
r = iterator(2) % r=1,5,9,13
end
3 Comments
Atsushi Ueno
on 1 Oct 2021
@Hernia Baby さん > 同感です。for文のドキュメンテーションは滅多に読まないので、私も
for index = values
statements
end
の応用例をみて「なんとこんな書き方も出来るのか!」とカルチャーショックを受けました。
for index = 1:100
statements
end
しかしですよ、MATLABで最初に習得するこの構文は「文法」だと認識していましたが、良く考えると(1:100)はベクトルで、上と下の文法は同じであると言えます。valuesは(1:100)でも[1:100;1:200]でも書き方は同じですし、それだけで動いてしまいます。一方C++等のfor文と範囲for文は文法が異なり、扱う変数の次元が一つ増えると大変な事になり、やれオーバーロードだなんだの面倒な知識習得を余儀なくされます。MATLABはもう最初からこの辺を「しれっと」難しい事を意識せずに使わせてしまっているのです。
この事実に( ゚д゚)ハッ!と気付いて、その後はもう興奮して夜しか眠れませんでした。
More Answers (1)
Hernia Baby
on 30 Sep 2021
操作内容によりますが基本的には難しいです。
c と r を同時に処理する場合、c = 1のときでも r は10この処理をそれぞれ行う必要があります。
なので以下のようにforの中にforで囲うのが一般的です
for c = 1:4
for r = 1:4:40
COMMAND;
end
end
----------------------------
X = {5:5:100, 10:10:100, 20:20:100};
Y = {rand(1,20), rand(1,10), rand(1,5)};
figure
hold on
p = cellfun(@plot,X,Y);
See Also
Categories
Find more on ループと条件付きステートメント 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!