Matlab 两个FOR语句耦合为一个
可以将两个for语句放入一个语句中。差不多Matlab 两个FOR语句耦合为一个,matlab,Matlab,可以将两个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
没有
读这个
我也看不到任何附加值,即使这是可能的不,我认为你不能在一行中放置两个for循环 根据您的操作,您可以对其进行整形,并将其用于循环。如果您正在做一些简单的事情,比如打印所有元素
B = reshape(A,a*b,1);
for i=1:a*b
c = B(i);
...
end
你的问题非常广泛,但有一点需要考虑的是,在Matlab中,你可以经常利用线性索引(而不是下标),而实际上不需要<代码>改写数组。比如说,
>> 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
但这与更广泛的问题并不相关。实际上,对于,您可以将多个循环组合成一个
,但是这需要您在包含所有元素而不是单个元素的向量上循环
以下是一种方法:
iRange = 1:2;
jRange = 1:3;
[iL jL] = ndgrid(iRange,jRange);
ijRange = [iL(:) jL(:)]';
for ij = ijRange
i = ij(1); j = ij(2);
end
请注意,在变量上循环可能更简单,但这种方法也可能有一些优点。简短回答:否。长回答:取决于操作。你的循环中有什么?不知道你在要求什么。你想迭代矩阵中的每个元素吗?我将非零元素存储在另一个矩阵中;对于索引号、值、行号和列号等元素,代码通常如下所示:对于i=1:a对于j=1:b body end,我的问题是我是否可以使用一个for语句而不是两个for语句。我假设使用多个循环有一些方法,主要问题是您希望通过它实现什么。如果您只需要更少的行,可以将两个for
命令放在一行中,用逗号分隔。这同样适用于两个end
命令。