Borrar filtros
Borrar filtros

any fast funcitons to do this triple for loop?

2 visualizaciones (últimos 30 días)
jenka
jenka el 3 de Mayo de 2012
I have this code. Is there any way to make it faster. My data is huge. Thanks. I am simple restoring everthing into vector instead of 3D array:
ii = 1
for z = 1:data_size(3)
for y = 1:data_size(2)
for x = 1:data_size(1)
data_tmp(ii) = data(x,y,z);
ii = ii+1;
end
end
end
  1 comentario
Daniel Shub
Daniel Shub el 3 de Mayo de 2012
If your data is huge, you will definitely want to preallocate data_tmp.

Iniciar sesión para comentar.

Respuestas (1)

Daniel Shub
Daniel Shub el 3 de Mayo de 2012
I believe
data_tmp = data(:);
should work, although the collapsing across dimension might not perfectly match your loops.
Edit: A simple check
data = reshape(1:8, 2, 2, 2)
data_size = size(data);
ii = 1;
for z = 1:data_size(3)
for y = 1:data_size(2)
for x = 1:data_size(1)
data_tmp(ii) = data(x,y,z);
ii = ii+1;
end
end
end
isequal(data_tmp, data(:))
reveals that my solution does not match your solution. But,
isequal(data_tmp, data(:)')
does match. So the answer is
data_tmp = data(:)';
  2 comentarios
jenka
jenka el 3 de Mayo de 2012
what do you mean: "collapsing across dimension might not perfectly match your loops"?
It is essential for my goal that the things are stored into my vector the way I put them through my loop (i.e. x first, then y, then z). Also, my starting point should be lower left corner. So I need some flipping?
Daniel Shub
Daniel Shub el 3 de Mayo de 2012
See my edit.

Iniciar sesión para comentar.

Categorías

Más información sobre Multidimensional Arrays en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by