2 つの for ステートメントを 1 つのステートメントに入れることができます。何かのようなもの
A = [ 0 0 0 5
0 2 0 0
1 3 0 0
0 0 4 0];
a=size(A);
b=size(A);
ind=0;
c=0;
for ({i=1:a},{j=1:b})
end
2 つの for ステートメントを 1 つのステートメントに入れることができます。何かのようなもの
A = [ 0 0 0 5
0 2 0 0
1 3 0 0
0 0 4 0];
a=size(A);
b=size(A);
ind=0;
c=0;
for ({i=1:a},{j=1:b})
end
あなたの質問は非常に広いですが、考慮すべきことの 1 つは、MATLAB では、実際にreshape
配列を使用することなく、(添え字の代わりに) 線形インデックスを利用できることが多いということです。例えば、
>> A = [ 0 0 0 5
0 2 0 0
1 3 0 0
0 0 4 0];
>> A(3,2)
ans =
3
>> A(7) % A(3+(2-1)*size(A,1))
ans =
3
for
多くの場合、すべての要素のループでこれを有利に使用できます。
for ii=1:numel(A),
A(ii) = A(ii) + 1; % or something more useful
end
以下と同じです:
for ii=1:size(A,2),
for jj=1:size(A,1),
A(jj,ii) = A(jj,ii) + 1;
end
end
しかし、コメントで述べたように、この問題の特定の目標に対処するために(「インデックス番号、値、行番号、列番号などの要素を使用して、ゼロ以外の要素を別の行列に格納しています。」)、疎にする行列表現、それはこれになります:
>> [i,j,s] = find(A);
>> [m,n] = size(A);
>> S = sparse(i,j,s,m,n)
S =
(3,1) 1
(2,2) 2
(3,2) 3
(4,3) 4
(1,4) 5
しかし、それはより広い質問にはあまり関係ありません。
実際には、複数のループを 1 つの に結合できますがfor
、個々の要素ではなく、すべての要素を含むベクトルをループする必要があります。
これを行う方法は次のとおりです。
iRange = 1:2;
jRange = 1:3;
[iL jL] = ndgrid(iRange,jRange);
ijRange = [iL(:) jL(:)]';
for ij = ijRange
i = ij(1); j = ij(2);
end
変数をループする方が簡単かもしれませんが、おそらくこの方法にもいくつかの利点があることに注意してください。