矢量化连续幂矩阵的创建

时间:2010-10-13 07:56:04

标签: matlab matrix vectorization

允许x=1:100N=1:10。我想创建一个矩阵x^N,以便i th 列包含条目[1 i i^2 ... i^N]

我可以使用for循环轻松完成此操作。但有没有办法使用矢量化代码?

5 个答案:

答案 0 :(得分:11)

我会去:

x = 1:100;
N = 1:10;
Solution = repmat(x,[length(N)+1 1]).^repmat(([0 N])',[1 length(x)]);

另一种解决方案(可能效率更高):

Solution = [ones(size(x)); cumprod(repmat(x,[length(N) 1]),1)];

甚至:

 Solution = bsxfun(@power,x,[0 N]');

希望这有帮助。

答案 1 :(得分:6)

听起来像范德蒙德矩阵。所以使用vander

A = vander(1:100);
A = A(1:10, :);

答案 2 :(得分:5)

由于您的矩阵不是那么大,最直接的方法是使用MESHGRIDelement-wise power operator .^

[x,N] = meshgrid(1:100,0:10);
x = x.^N;

这会创建一个11 x 100的矩阵,其中每列i包含[i^0; i^1; i^2; ... i^10]

答案 3 :(得分:2)

不确定它是否真的适合您的问题。

bsxfun(@power, cumsum(ones(100,10),2), cumsum(ones(100,10),1))

修改 正如Adrien所指出的,我的第一次尝试不符合OP问题。

xn = 100;
N=10;
solution = [ones(1,xn); bsxfun(@power, cumsum(ones(N,xn),2), cumsum(ones(N,xn),1))];

答案 4 :(得分:1)

为什么不使用易于理解的for循环?

c = [1:10]'; %count to 100 for full scale problem
for i = 1:4; %loop to 10 for full scale problem
    M(:,i) = c.^(i-1)
end

理解人们已经展示的这段代码的聪明矢量化版本需要更多的思考。我的做事更像是一种野蛮的做事方式,但阅读它的人都会明白这一点。

我更喜欢易于理解的代码。

(是的,我可以预先分配。对于像这样的小案例,不值得降低清晰度。)