for文について
21 次查看(过去 30 天)
显示 更早的评论
for文において下記のように書くと
for c=1:4
end
1~4までループさせる事が出来ると思います。
ですが、私は下記に書くように
for c=1:4 r=:1:4:40
end
cとrの二つのループを同じタイミングで進ませたいのですが何か方法はありますでしょうか?
0 个评论
采纳的回答
Atsushi Ueno
2021-9-30
编辑:Atsushi Ueno
2021-9-30
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 个评论
Atsushi Ueno
2021-10-1
@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はもう最初からこの辺を「しれっと」難しい事を意識せずに使わせてしまっているのです。
この事実に( ゚д゚)ハッ!と気付いて、その後はもう興奮して夜しか眠れませんでした。
更多回答(1 个)
Hernia Baby
2021-9-30
操作内容によりますが基本的には難しいです。
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);
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!