Vectorise an n dimensional raise to the power loop

I am looking for the fastest way to compute the following
x = rand(1,1000);
for j = 1:m
for j = 1:n %etc.
phi(i,j,...) = ((x).^i).^j; %etc.
end
end
I have been looking at the bsxfun tool but it is restricted to a one-dimensional output.
Help would be gratefully appreciated, cheers.

 Respuesta aceptada

Teja Muppirala
Teja Muppirala el 4 de Abr. de 2012
You can call BSXFUN more than once:
x = rand(1,1000);
m = 30;
n = 40;
tic
P1 = zeros(m,n,numel(x));
for ii = 1:n
for jj = 1:m
P1(jj,ii,:) = x.^jj.^ii;
end
end
toc
tic
P2 = bsxfun(@power, bsxfun(@power,permute(x,[3 1 2]),(1:m)'), 1:n);
toc
isequal(P1,P2)

Más respuestas (0)

Categorías

Más información sobre MATLAB en Centro de ayuda y File Exchange.

Preguntada:

el 4 de Abr. de 2012

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by