Can I vectorize this any further?

1 visualización (últimos 30 días)
Alex Kurek
Alex Kurek el 16 de Jun. de 2016
Comentada: Alex Kurek el 20 de Jun. de 2016
Hello,
I have such a code:
maxN = 100;
xElements = 200;
XY = ones(xElements, xElements); % for simplicity, if fact there are more complicated doubles
%
for i = 1 : xElements
for j = 1 : xElements
nVec = 0:maxN;
besselForCurrentN = besselj(nVec+1, 2*pi*XY(i, j));
% (...)
end
end
How to vectorize it also for i and j?
Best regards, Alex

Respuesta aceptada

Roger Stafford
Roger Stafford el 16 de Jun. de 2016
My understanding is that - I admit I haven’t tried this - if you use the ‘bsxfun’ with its ‘fun’ defined as ‘besselj’ and the two arguments “reshape(nVec+1,1,1,[])” and “2*pi*XY”, you will get a 3D array for 'besselForCurrentN' as the result in accordance with nVec+1 varying along the third dimension. An alternative would be to use ‘repmat’ and ‘reshape’ on both nVec+1 and 2*pi*XY in such a way that both become 3D arrays of the same size and then call on ‘besselj’ with these as inputs - I believe ‘besselj’ will accept two 3D arrays if they are the same size.
Whether you can use such a 3D result in a vectorized manner in your further computations is something only you can determine.
  3 comentarios
Roger Stafford
Roger Stafford el 17 de Jun. de 2016
What I had in mind is:
[m,n] = size(XY);
B = besselj(repmat(reshape(nVec+1,1,1,[]),m,n,1),repmat(2*pi*XY,1,1,length(nVec)));
However, I doubt that this will be as fast as using ‘bsxfun’.
Alex Kurek
Alex Kurek el 20 de Jun. de 2016
I tried, the speed is identical.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Bessel functions en Help Center y File Exchange.

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by