-1

可以将两个 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
4

4 回答 4

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

但这与更广泛的问题并不真正相关。

于 2013-10-23T23:09:48.047 回答
0

实际上,您可以将多个循环组合成一个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

请注意,循环变量可能更简单,但也许这种方法也有一些优点。

于 2013-10-24T08:57:27.717 回答
-1

阅读此http://www.mathworks.com/help/matlab/matlab_prog/loop-control-statements.html 即使有可能,我也看不到任何附加值

于 2013-10-23T22:47:03.837 回答
-1

不,我认为您不能将两个 for 循环放在一行中。

取决于您的操作,您也许可以对其进行重塑并使用一个 for 循环。如果您正在做一些简单的事情,例如打印所有元素,

B = reshape(A,a*b,1);
for i=1:a*b
    c = B(i);
    ...
end
于 2013-10-23T22:48:12.030 回答