可以将两个for语句放入一个语句中。类似的东西
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
你的问题非常广泛,但需要考虑的一件事是,在 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
但这与更广泛的问题并不真正相关。
实际上你可以将多个循环组合成一个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
请注意,遍历变量可能更简单,但也许此方法也有一些优点。
否
阅读此 http://www.mathworks.com/help/matlab/matlab_prog/loop-control-statements.html即使有可能,我也看不到任何附加值
不,我认为你不能在一行中放置两个 for 循环。
根据您的操作,您可以重塑它并使用一个 for 循环。如果您正在做一些简单的事情,例如打印出所有元素,
B = reshape(A,a*b,1);
for i=1:a*b
c = B(i);
...
end