如何生成x的前20个幂?

时间:2013-12-01 17:25:10

标签: matlab octave vectorization

所以,我有X,一个300 x 1的矢量,我想要[1,X,X * X,X * X * X,......,X * X * ...... * X],一个300×20的矩阵。

我该怎么做?

X=[2;1]
[X,X.*X,X.*X.*X]

ans =

   2   4   8
   1   1   1

这有效,但我无法打字输出整件事。当然我不必写一个for循环?

4 个答案:

答案 0 :(得分:5)

使用bsxfun获得一个简洁的解决方案,或者去Luis Mendo的盛会节省一些时间;)

powers = 1:20;
x = 1:20;

result = bsxfun(@power,x(:),powers(:).');    

给出:

 1    1    1 ...
 8   16   32 ...
27   81  243 ...
64  256 1024 ...
... ...  ...

答案 1 :(得分:5)

如果您想最小化操作次数

cumprod(repmat(X(:),1,20),2) %// replace "20" by the maximum exponent you want

基准测试:对于大小为300x1的X,最大指数为20.我使用tictoc测量时间,平均为1000次。结果(平均值):

  • 使用cumprod(此答案):8.0762e-005秒
  • 使用bsxfun(@thewaywewalk回答):8.6170e-004秒

答案 2 :(得分:1)

element-wise power operator .^应该满足您的需求:

x .^ (1:20)

(假设x是列向量。)

答案 3 :(得分:0)

使用电源。它提升了y的力量,并且如果y是向量则重复。

power(x,1:300)

编辑:power和。^运算符是等价的。