Can I vectorize this any further?
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
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
0 comentarios
Respuesta aceptada
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
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’.
Más respuestas (0)
Ver también
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!