Speeding up comparison using strcmp
14 次查看(过去 30 天)
显示 更早的评论
Hello! I have a list of approximately 2 million records and I would like to compare the records with a list of devices which generates those records. My code is as follows where "c" is the list of records and "device" is the list for distinct devices:
for ii = 1:length(device)
idx = ( strcmp(c,device(ii,:)) );
lidx = find(idx);
devid{ii} = lidx;
end
The problem is the above code takes too long time (more than an hour). Would you please tell me know how to reduce execution time?
Many thanks!
2 个评论
采纳的回答
Titus Edelhofer
2015-1-13
Hi,
I would convert device to a cell array (using cellstr) and then call ismember without the loop, something like
cellDevice = cellstr(device);
[~, devid] = ismember(cellDevice, records);
Titus
3 个评论
Titus Edelhofer
2015-1-13
I understand. In this case it might be hard without a loop. I'm not sure, but something like this could work then:
[~,idx] = ismember(records, cellDevice);
devid = cell(numel(cellDevice), 1);
for ii=1:length(devid)
devid{ii} = find(idx==ii);
end
Titus
更多回答(1 个)
David Sanchez
2015-1-13
If you have getnameidx available in your system, you might transform your device to a cell:
device_cell = celstr(device);
and then look for their position within c:
device_positions = getnameidx(c,device_cell);
which will return the position of your devices within the c cell
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!