for文について

21 次查看(过去 30 天)
朋貴 熊田
朋貴 熊田 2021-9-30
for文において下記のように書くと
for c=1:4
end
1~4までループさせる事が出来ると思います。
ですが、私は下記に書くように
for c=1:4 r=:1:4:40
end
cとrの二つのループを同じタイミングで進ませたいのですが何か方法はありますでしょうか?

采纳的回答

Atsushi Ueno
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はループを回る度に与えられた行列の各列を走査していきます。
C++等比較的新しい言語に範囲for文がありますが、MATLABにもこれと同じ仕様が最初からあるのです。
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
c = 1
r = 1
c = 2
r = 5
c = 3
r = 9
c = 4
r = 13
  3 个评论
朋貴 熊田
朋貴 熊田 2021-9-30
ご回答ありがとうございます。早速試してみます。
Atsushi Ueno
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
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
----------------------------
ものによって同時に何かをする場合は cellfunarrayfun などを使うといいかもしれません
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);
  1 个评论
朋貴 熊田
朋貴 熊田 2021-9-30
ご回答ありがとうございます。

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 ループと条件付きステートメント 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!