我正在尝试在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
。想。
有没有人有更好的方法来提取指数的总和?
答案 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]);