Select specific data from nested struct ?
1 view (last 30 days)
Show older comments
azdoud youssef
on 17 Jan 2018
Commented: Walter Roberson
on 19 Jan 2018
Hi, I have the following structure: data
I need to select those where data.name = t1 and t6
and this case too :
I need to select those where data.name = t1 and t6 and data.type= 'aac'
Glad for any help
data(1:6) = struct('name', '', 'type', '', 'value', zeros(1,1));
data(1).name= 't1'; data(1).type= 'aac';data(1).value=0.569;
data(2).name= 't2'; data(2).type= 'rta';data(2).value=0.657;
data(3).name= 't1'; data(3).type= 'vb';data(3).value=0.98;
data(4).name= 't6'; data(4).type= 'aac';data(4).value=0.451;
data(5).name= 't2'; data(5).type= 'ed';data(5).value=0.354;
data(6).name= 't1'; data(6).type= 'aab';data(6).value=0.846;
0 Comments
Accepted Answer
Walter Roberson
on 17 Jan 2018
mask = ismember({data.name}, {'t1', 't6'});
selected_data = data(mask);
6 Comments
Walter Roberson
on 19 Jan 2018
mask = ismembertol([data.value], [0.98]);
Notice the switch to ismembertol(). ismember() is for exact (bit-for-bit) comparisons, but calculated values are seldom bit-for-bit identical to floating point constants because of round-off error. http://matlab.wikia.com/wiki/FAQ#Why_is_0.3_-_0.2_-_0.1_.28or_similar.29_not_equal_to_zero.3F . ismembertol() is a convenient way to test "close too".
You should also be considering a range test:
temp = [data.value];
mask = (temp = 0.97) & (temp < 0.99);
More Answers (0)
See Also
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!