MATLABの変数を動的に使いたい

MATLABを使用しているのですが、forループ内の左辺の変数を動的に変えたい場合、どのような手段があるでしょうか?
例として、シンプルなプログラムで説明します。
例) 例えば、変数(2次元配列)が10000個ある場合に、for文を使用して、左辺を動的に変える事で、全ての二次元配列の指定したセルに1を足していくようなプログラムは可能でしょうか?
変数(Workspace内)
a1 %10x2の配列とします
a2
:
:
a10000
プログラム
for i=1:10000
a1(1,1) = a1(1,1) + 1;%この配列a1をa2,a3...へとループ内で変更したい
end

 채택된 답변

Hiroyuki Hishida
Hiroyuki Hishida 2019년 12월 8일

1 개 추천

こんいうイメージでしょうか?
for i=1:size_i
for j=1:size_y
X(i,j)= X(i,j) +1;
end
end
MATLABの特性を活かすなら、これでも良いかと。
for i=1:size_i*size_j
X(i) = X(i) +1;
end
さらには例えXがn次元だとしても、その要素に1を加算するのであれば、
X+1;
で良いです。MATLABによる行列演算については、先程のリンクから飛べますので、是非ごらんください。

댓글 수: 6

Aki
Aki 2019년 12월 8일
質問の意図が伝わっていないようです
a1(i,j)
のiとjは簡単に変えられるので良いのですが,
a1(i,j) =
から
a2(i,j) =
へと左辺の配列自体をforループの中で変えたいのです.
MATLABにポインタはないようですので,そこで悩んでいます.
Kenta
Kenta 2019년 12월 8일
clear;clc
a1=zeros(10,2);
a2=ones(10,2);
a3=ones(10,2)+1;
a4=ones(10,3)+2;
for i=1:4
exp1 = sprintf('a%d',i);
exp2 = '(1,1)=';
exp3 = '(1,1)';
exp=strcat(exp1,exp2,exp1,exp3,'+1',';');
eval(exp)
end
こんにちは、上のような感じでいかがでしょうか?
つまり、a1(1,1)に1を足して、a2(1,1)に1を足す...ということを繰り返す、というふうになっています。
いまは、(1,1)を対象としていますが、複数(例:それぞれの変数の(2,3)と(2,8))にしたい場合は、外にもう1つループを作れば可能と思います。
Aki
Aki 2019년 12월 8일
strcatとevalを使用することで,変数を変えることができるんですね.
sprintfは使用していたのですが,左辺には使用することができなくてとても困っておりました.
大変参考になりました.ありがとうございます.
Kenta
Kenta 2019년 12월 8일
返信ありがとうございます。解決し、よかったです。
いまは、(1,1)と1つの値しか変更してませんが、ここの「1」を変数として入力すれば
ほかの座標の値も変更可能です。またいろいろ試してみて、不備があればご連絡ください。よろしくお願いいたします。
Yoshio
Yoshio 2019년 12월 8일
変数としてcell配列を使っても良いなら、以下のような方法もあるかと思います。
clear
numArrays = 3;
A = cell(numArrays,1);
for n = 1:numArrays
A{n} = magic(n);
end
B = A;
for n = 1:numArrays
B{n}(1,1) = A{n}(1,1)+1;
end
A{:}
B{:}
ans =
1
ans =
1 3
4 2
ans =
8 1 6
3 5 7
4 9 2
ans =
2
ans =
2 3
4 2
ans =
9 1 6
3 5 7
4 9 2
Aki
Aki 2019년 12월 10일
このような方法もあるのですね
シンプルで良い方法ですね ありがとうございます

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Hiroyuki Hishida
Hiroyuki Hishida 2019년 12월 8일
편집: Hiroyuki Hishida 2019년 12월 8일

2 개 추천

例えば、左辺を配列化してこういうのはどうでしょうか? MATLAB感の少ない書き方ではありますが、
var_tmp =初期化
for iter=1:1000
var_tmp(iter)=var_tmp(iter)+1;
end
MATLAB感を出すなら、for文なくして、そのまま+1で良いと思います。 MATALB環境の行列
よろしくお願いします

댓글 수: 1

Aki
Aki 2019년 12월 8일
素早い回答ありがとうございます.
扱いたい対象は2次元配列であったので,質問内容を編集しました.
複数の二次元行列を左辺に使用したい場合は,どのような手段があるでしょうか?
ご回答よろしくお願いします.

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Logical에 대해 자세히 알아보기

제품

릴리스

R2017b

질문:

Aki
2019년 12월 7일

댓글:

Aki
2019년 12월 10일

Community Treasure Hunt

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

Start Hunting!