假设每个N
长度为X_1, X_2, ..., X_N
的{{1}}个向量k
。我们想要所有可能的总和X_1(i1) + X_2(i2) + ... + X_N(iN)
,其中i1, i2, ..., iN
的范围是1...k
。有k^N
个这样的总和。有没有其他方法可以使用内置函数在Matlab中完成,除了N for-loops
如下所示:
counter = 1;
for i1=1:k
for i2=1:k
.
.
.
for iN=1:k
res(counter) = X_1(i1) + X_2(i2) + ... + X_N(iN);
counter = counter + 1;
end
.
.
.
end
end
此外,此代码需要对N
的值进行硬编码,因为我们需要N for-loops
。我们如何为N
的任何一般值编码?
答案 0 :(得分:1)
N次迭代的单循环应该足够了。 (这里展开了)
sums=zeros(1,k^N);
id = 1:k^N;
i = mod(id, k)+1; id=(id-i) / k;
sums = sums + X_1(i);
i = mod(id, k)+1; id=(id-i) / k;
sums = sums + X_2(i);
...
i = mod(id, k)+1; id=(id-i) / k;
sums = sums + X_N(i);
答案 1 :(得分:0)
答案是使用 ndgrid 。
[s{1:N}] = ndgrid(-K:K);
res = zeros(k^N,1);
for i=1:N
res = res + s{i}(:)
end