如果我想构造一个double for循环,但对于index k
我不希望它是连续索引,而是像[1,2,4,7]。我试图做以下事情,但它没有用。
for i=1:100
for k=1:2:4:7;
b(i)=i*k;
end
end
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:1)
如果您想构建一个数组,除非您想创建一个范围值,否则您不一定要使用colon (:
) operator(就像您想要的那样) []
为1到100之间的所有值,而您希望使用带逗号分隔符的方括号(k = [1,2,4,7];
)来显式创建离散值数组。
k
既然你这样做了,你就可以用kvalues = [1,2,4,7];
for i = 1:100
for k = 1:numel(kvalues)
b(i) = i * kvalues(k);
end
end
kvalues
请注意,我已经在循环外定义了b(i)
一次,因此不会在每次迭代时通过外循环创建它(感谢@dfri指出这种疏忽)
你编写循环的方式,每次通过内循环,你实际上覆盖 b = k(end) * (1:100);
的值。我不确定这是不是你打算做什么。如果是,那么您可以将循环减少到以下内容:
b(i,k) = i * k
否则,如果您打算将其bsxfun
,则可以使用b = bsxfun(@mtimes, [1,2,4,7], (1:100).');
重写此内容。
getDay()
答案 1 :(得分:0)
语法k=1:2:4:7
无法按预期运行。通常我们会使用"两个冒号"用于描述从给定1
到start
值end
的非默认(k = start:stepSize:end
)步长的语法。在这里使用额外的冒号甚至会产生一个Matlab警告("第三个冒号可能无意?" )。
一种可能的解决方法是让您的"非连续"索引驻留在向量中,并在内部for
循环中提取此向量的成员,如下所示
nonContIndex = [1; 2; 4; 7];
numIndices = numel(nonContIndex);
b = zeros(100,numIndices);
for i=1:100
for k=1:numIndices
b(i,k)=i*nonContIndex(k);
end
end
正如注释和其他答案所述:如果b
只是一个向量,那么原始循环将覆盖内循环每次运行的b(i)
:th条目。以上假设您实际上想要一个2D矩阵。