单个索引的二维数组索引的总和

时间:2014-01-20 01:21:26

标签: arrays matlab parfor

我正在尝试在MATLAB中创建一个并行for循环来填充m x m矩阵,如下所示:

parfor i = 1 : m^2
     A(i) = sum( x .^ %Sum of indices% );
end

如果我在没有parfor的情况下这样做,我会这样做:

for i = 1 : m
     for j = 1 : m
          A(i,j) = sum( x.^(i+j) );
     end
end

然而不幸的是parfor不允许其身内的其他指数,因此我不能做我想做的事。

我尝试使用ceil(i/3) + mod(i,3)来提取索引的总和,但是这不起作用,因为在i=3它给了我1而不是4。想。

有没有人有更好的方法来提取指数的总和?

3 个答案:

答案 0 :(得分:1)

   r=sum(  bsxfun(@power, x(:), m+1:2*m  ) ,1);
   c=sum(  bsxfun(@power, x(:), m+1:-1:2 ) ,1);

   A=fliplr(toeplitz(c,r));

答案 1 :(得分:0)

  [I,J]=ndgrid(1:m);
  K=I+J;

  A=zeros(m);

  parfor i=1:m^2

   A(i)=sum(x.^(K(i)));

  end

答案 2 :(得分:0)

这是另一个矢量化变体:

[I,J] = ndgrid(1:m, 1:m);
K = I + J;
A = reshape(sum(bsxfun(@power, x, K(:).')), [m m]);