是否可以将两个语句放入一个语句中。像两个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
是否可以将两个语句放入一个语句中。像两个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
没有
东西读这http://www.mathworks.com/help/matlab/matlab_prog/loop-control-statements.html 我还没有看到,即使有可能
不,我不认为你可以把两个for循环中的任何一个增值线。
取决于您的操作,您可能可以重塑它并使用一个循环。如果你正在做的只是打印出的所有元素一样简单的东西,
B = reshape(A,a*b,1);
for i=1:a*b
c = B(i);
...
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
但解决您的这个问题的具体目标,正如你在评论中所说的(“我将另外一个矩阵中的非零元素存储在其中,包括索引号,值,行号和列号等元素)”, rse矩阵表示法,它涉及到:
>> [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
请注意,循环在变量可能是简单的,但也许这种方法有一定的优势。
简答:不需要很长的回答:取决于手术。你的'for'循环里有什么? – chappjc
不知道你在问什么。你想迭代矩阵中的每个元素吗? – Daniel
我将非零元素存储在另一个矩阵中;包含索引号,值,行号和列号等元素。 – user2864566