Effacer les filtres
Effacer les filtres

any fast funcitons to do this triple for loop?

2 vues (au cours des 30 derniers jours)
jenka
jenka le 3 Mai 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 commentaire
Daniel Shub
Daniel Shub le 3 Mai 2012
If your data is huge, you will definitely want to preallocate data_tmp.

Connectez-vous pour commenter.

Réponses (1)

Daniel Shub
Daniel Shub le 3 Mai 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 commentaires
jenka
jenka le 3 Mai 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 le 3 Mai 2012
See my edit.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Multidimensional Arrays dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by