矢量化连续幂矩阵的创建

ale*_*t87 12 matlab matrix vectorization

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

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

Adr*_*ien 11

我会去:

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

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

Solution = [ones(size(x)); cumprod(repmat(x,[length(N) 1]),1)];
Run Code Online (Sandbox Code Playgroud)

甚至:

 Solution = bsxfun(@power,x,[0 N]');
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.


Oli*_*rth 6

听起来像是Vandermonde矩阵.所以使用vander:

A = vander(1:100);
A = A(1:10, :);
Run Code Online (Sandbox Code Playgroud)


gno*_*ice 5

由于你的矩阵不是那么大,最直接的方法是使用MESHGRID元素幂 函数运算符.^:

[x,N] = meshgrid(1:100,0:10);
x = x.^N;
Run Code Online (Sandbox Code Playgroud)

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

  • 很好的meshgrid用法.我对这种方法和这里提出的类似方法的唯一问题是它们不使用第i行以低成本计算线i + 1.cumprod变种做到了,但缺少一些美学. (2认同)