How to generate the first twenty powers of x?

后端 未结 4 744
感情败类
感情败类 2021-01-28 18:42

So, I\'ve got X, a 300-by-1 vector and I\'d like [1, X, X*X, X*X*X, ... , X*X*...*X], a 300-by-twenty matrix.

How should I do this?

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


        
相关标签:
4条回答
  • 2021-01-28 19:08

    Use bsxfun for a neat solution, or go for Luis Mendo's extravaganza to save some time ;)

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

    gives:

     1    1    1 ...
     8   16   32 ...
    27   81  243 ...
    64  256 1024 ...
    ... ...  ...
    
    0 讨论(0)
  • 2021-01-28 19:10

    The element-wise power operator .^ should do what you need:

    x .^ (1:20)
    

    (assuming x is a column vector.)

    0 讨论(0)
  • 2021-01-28 19:13

    If you want to minimize the number of operations:

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

    Benchmarking: for X of size 300x1, maximum exponent 20. I measure time with tic, toc, averaging 1000 times. Results (averages):

    • Using cumprod (this answer): 8.0762e-005 seconds
    • Using bsxfun (answer by @thewaywewalk): 8.6170e-004 seconds
    0 讨论(0)
  • 2021-01-28 19:13

    Use power. It raises something to the power of y, and repeats if y is a vector.

    power(x,1:300)
    

    edit: power and .^ operator are equivalent.

    0 讨论(0)
提交回复
热议问题