Is it possible to loop through 3D coordinates in a meshgrid using only one for loop?
Mostrar comentarios más antiguos
I have created a square meshgrid containing the Cartesian coordinates of a region in a 3D space. Now, I want to loop through each of the coordinates using a single for loop. Is there a way to linearize this grid in coordinate by coordinate basis? Essentially, I want to call each cooridnate during each loop. Is it doable in anyway?
I know it can be done using nested loops, but I am trying to avoid that to reduce the execution time. Thanks in advacne.
Respuestas (2)
Walter Roberson
el 8 de Nov. de 2022
for idx = 1 : numel(X3D)
this_x = X3D(idx); this_y = Y3D(idx); this_z = Z3D(idx);
stuff involving this_x, this_y, this_z
end
but this will probably not be notably faster than three nested loops. You should consider using vectorized calculations (over at least one dimension) instead of indexing over each coordinate in turn.
2 comentarios
Walter Roberson
el 9 de Nov. de 2022
Editada: Walter Roberson
el 9 de Nov. de 2022
position_grid = meshgrid(x_coor,y_coor,z_coor);
meshgrid emits one output per dimension, so that call is only going to be returning the 3D X coordinates, not the Y or Z. You would need
[X3D, Y3D, Z3D] = meshgrid(x_coor,y_coor,z_coor);
or equivalent.
Euclidean distance from the origin, without generating and saving explicit coordinate lists, is
D = sqrt( reshape(x_coor, [], 1, 1).^2 + reshape(y_coor, 1, [], 1).^2 + reshape(z_coor, 1, 1, []).^2 );
This would be an array that is length(x_coor) by length(y_coor) by length(z_coor)
Categorías
Más información sobre Creating and Concatenating Matrices en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!