我对此嵌套的for循环有疑问:
eta = [1e-3:1e-2:9e-1];
HN =5;
for ii = 1:numel(eta)
for v = 1:HN
DeltaEta(v) = eta(ii)*6;
end
end
此代码将DeltaEta
的输出作为1x5向量。
但是,我希望结果是90x5向量,其中DeltaEta
的每个值{5}计算5次。
我相信问题出在我嵌套循环的方式上。
看似微不足道,但我无法获得所需的输出,任何线索都将不胜感激。
答案 0 :(得分:1)
您正在将输出分配到DeltaEta(v)
,其中v = 1,2,..,HN
。因此,您只分配给
DeltaEta(1), DeltaEta(2), ..., DeltaEta(5)
您可以使用2D矩阵输出解决此问题,也可以在ii
上建立索引...
eta = [1e-3:1e-2:9e-1];
HN = 5;
DeltaEta = NaN( numel(eta), HN );
for ii = 1:numel(eta)
for v = 1:HN
DeltaEta(ii,v) = eta(ii)*6;
end
end
% optional reshape at end to get column vector
DeltaEta = DeltaEta(:);
请注意,您的内部循环内没有任何变化-DeltaEta
的所有值都相同。这意味着您可以摆脱内循环
v
现在我们可以看到一种也可以真正去除外循环的方法
eta = [1e-3:1e-2:9e-1];
HN = 5;
DeltaEta = NaN( numel(eta), HN );
for ii = 1:numel(eta)
DeltaEta( ii, : ) = eta(ii) * 6;
end
答案 1 :(得分:0)
要按照要求回答您的问题,您需要在ii
和v
上建立索引:
eta = [1e-3:1e-2:9e-1];
HN =5;
for ii = 1:numel(eta)
for v = 1:HN
DeltaEta(ii,v) = eta(ii)*6;
end
end
但是,这通常不是一个好主意-如果您在MATLAB中使用for循环(尤其是双嵌套的for循环)时会陷入困境,则应考虑是否有更好的方法来利用MATLAB强大的矢量化能力。 / p>