any fast funcitons to do this triple for loop?

1 view (last 30 days)
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 Comment
Daniel Shub
Daniel Shub on 3 May 2012
If your data is huge, you will definitely want to preallocate data_tmp.

Sign in to comment.

Answers (1)

Daniel Shub
Daniel Shub on 3 May 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 Comments
jenka
jenka on 3 May 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?

Sign in to comment.

Categories

Find more on Multidimensional Arrays in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!