フィルターのクリア

Speeding up comparison using strcmp

31 ビュー (過去 30 日間)
Yongmin
Yongmin 2015 年 1 月 13 日
コメント済み: Titus Edelhofer 2015 年 1 月 13 日
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 件のコメント
David Sanchez
David Sanchez 2015 年 1 月 13 日
What do you mean by "list".
Are c and device sell arrays?
Yongmin
Yongmin 2015 年 1 月 13 日
編集済み: Yongmin 2015 年 1 月 13 日
Yes, c is cell array and device is array of character strings.

サインインしてコメントする。

採用された回答

Titus Edelhofer
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
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
Yongmin
Yongmin 2015 年 1 月 13 日
Wow, the method you told is much faster. Thank you so much for your help!!

サインインしてコメントする。

その他の回答 (1 件)

David Sanchez
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
  3 件のコメント
Yongmin
Yongmin 2015 年 1 月 13 日
編集済み: Yongmin 2015 年 1 月 13 日
Many thanks for your answer. But I don't have getnameidx in my system. Would you please tell me how to get it?
Titus Edelhofer
Titus Edelhofer 2015 年 1 月 13 日
As I said, it's in the Financial Toolbox, but it won't help for your problem.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by