Speeding up comparison using strcmp

44 views (last 30 days)
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;
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!
Yongmin on 13 Jan 2015
Edited: Yongmin on 13 Jan 2015
Yes, c is cell array and device is array of character strings.

Sign in to comment.

Accepted Answer

Titus Edelhofer
Titus Edelhofer on 13 Jan 2015
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);
Yongmin on 13 Jan 2015
Wow, the method you told is much faster. Thank you so much for your help!!

Sign in to comment.

More Answers (1)

David Sanchez
David Sanchez on 13 Jan 2015
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
Titus Edelhofer
Titus Edelhofer on 13 Jan 2015
As I said, it's in the Financial Toolbox, but it won't help for your problem.

Sign in to comment.


Find more on Dates and Time 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!

Translated by