是否可以將兩個語句放入一個語句中。像兩個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