你可以用双循环来做到这一点
Orig = [x y z k];
exponent = [0 1 2 3 4 5];
%# preassign output to speed up loop
output = zeros(length(Orig),length(exponent));
%# loop over all elements in Orig
for r = 1:length(Orig)
%# loop over all exponents
for c = 1:length(exponent)
output(r,c) = Orig(r)^exponent(c);
end
end
但是,这不是您通常在Matlab中编程的方式.
相反,你要复制Orig和exponent,并在一个矢量化操作中进行计算:
%# transpose orig so that it is a n-by-1 array
repOrig = repmat(Orig',1,length(exponent); %'#
repExp = repmat(exponent,length(Orig),1);
%# perform the exponent operation in one go
output = repOrig .^ repExp; %# note the ".", it applies operations element-wise
几年以来,有一个快捷版本,使用函数bsxfun.这将自动执行我们上面用repmat执行的扩展,并且它会更快.
output = bsxfun(@power, Orig', exponent);