How to assign parts of one structure to another efficiently?

I have a structure, 'D', which contains 'name'. I would like to assign certain parts of this struct to another struct in an efficient manner. What I have now (which works) is the following:
j = 0;
for i = 1:length(D)
if ( m_u(i) ~= 0 )
j = j + 1;
temp(j).name = D(i).name;
end
end
In this code, the contents of 'D.name' are assigned to 'temp.name' if a vector component is not zero. Is there a more efficient way to do this?

 Accepted Answer

% Sample struct
x = struct('name',cellstr(('A':'I').'))
% sample index (your mu_i)
idx = rand(9,1)>0.5
% extract
[y(1:nnz(idx)).name] = deal(x(idx).name)

1 Comment

Thank you very much, Sean. My code ends up being:
[temp(1:nnz(m_u)).name] = deal(D(m_u~=0).name);
This is an order of magnitude faster than the way I was doing this (~0.5 seconds to ~0.07 seconds!).

Sign in to comment.

More Answers (0)

Categories

Asked:

on 19 Jun 2014

Edited:

on 20 Jun 2014

Community Treasure Hunt

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

Start Hunting!