How to simplify this and make it efficient
1 view (last 30 days)
Show older comments
I have a 1x500 cell (res) with a structure in each, and a 300x3 table (G). I need to check for each combination if strcmp between the field res{j}.fir and each row in G.
If it is equal I need to add the field from res 'thisisstring' to a new 4. column in the table G. The following works but is so slooow....
for i = 1:size(G{:,1},1)
for j = 1:size(res,2)
if strcmp(res{j}.fir,G{i,1}{1})
G{i,4} = res{j}.thisisstring;
end
end
end
If someone have an idea to simplify this it would be great!
0 Comments
Accepted Answer
Bruno Luong
on 5 Sep 2019
Edited: Bruno Luong
on 6 Sep 2019
NOTE: what a messy and bad data structure. There might be a much better way than working cell of structs and table.
% Generate test data
S = string(ceil(10*rand(300,3)));
G = table(S(:,1),S(:,2),S(:,3));
fir = num2cell(string(ceil(10*rand(1,500)+5)));
thisisstring = num2cell(string(ceil(100*rand(1,500)+100)));
res = num2cell(struct('fir',fir,'thisisstring',thisisstring));
clear S fir thisisstring % only G and res stay
% Engine here, do the same thing than your double for loops
[b,loc] = ismember( G{:,1}, cellfun(@(r) r.fir, res));
G(b,4) = table(cellfun(@(r) r.thisisstring, res(loc(b)))');
% Check the result
G
7 Comments
More Answers (0)
See Also
Categories
Find more on Logical in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!