所以,我有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循环?
答案 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.我使用tic
,toc
测量时间,平均为1000次。结果(平均值):
cumprod
(此答案):8.0762e-005秒bsxfun
(@thewaywewalk回答):8.6170e-004秒答案 2 :(得分:1)
答案 3 :(得分:0)
使用电源。它提升了y的力量,并且如果y是向量则重复。
power(x,1:300)
编辑:power和。^运算符是等价的。