Matlab中的多向量处理

时间:2012-10-30 11:35:45

标签: arrays matlab

假设每个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的任何一般值编码?

2 个答案:

答案 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