Convert cell of strings to numbers

5 ビュー (過去 30 日間)
Óscar
Óscar 2015 年 2 月 25 日
コメント済み: Óscar 2015 年 2 月 26 日
Hallo, On the one hand I have a cell of strings (with around 400 elements) and on the other hand in a loop I have another element (different each time) so I have to find the position of that element at the big array each time. Which is really slow.... so my intention is to convert the cell to numbers (the other string as well) and then just find in the array of number one number.
Is that possible?
Thanks in advance!
  2 件のコメント
Azzi Abdelmalek
Azzi Abdelmalek 2015 年 2 月 25 日
編集済み: Azzi Abdelmalek 2015 年 2 月 25 日
Can you post a short example? and post the code you are using
Óscar
Óscar 2015 年 2 月 25 日
編集済み: Guillaume 2015 年 2 月 25 日
Thanks, yes, this is my actual code:
aux=indexDictionary(ismember(dictionary,value));
where value is the string I want to seek in the dictionary which is something like:
dictionary ={'HOUSE';'CAT';'DOG';'WARDROBE';'BED';'MATTRESS';'SHEETS';'DESK';'LIGHT';....;};
And indexDictionary is just an array with these values: [1,2,3,4,5,6,7,..] so I can get the index of the word as easy as possible.
Then that line is inside a loop, so value is different each time. When I run the code with the Profiler tool, it executes that line around 200000 times which consumes more than 300s so I want to speed it up.
I don't really know how the function 'ismember' works, but I guess is faster for numbers than for strings. That's why I'd like to change the dictionary to a cell of int.
thanks

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

採用された回答

Guillaume
Guillaume 2015 年 2 月 25 日
Neither the ismember nor the indexDictionary indirection is necessary:
aux = find(strcmp(dictionary, value), 1);
In all likelyhood ismember dispatches to strcmp when given strings, so bypass the middleman which you don't need in your case.
  1 件のコメント
Óscar
Óscar 2015 年 2 月 26 日
Thank, This is the fastest way, with this line instead of the previous one the elapsed time is reduced from 300 to 28s.

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

その他の回答 (2 件)

Azzi Abdelmalek
Azzi Abdelmalek 2015 年 2 月 25 日
str = {'a' 'b' 'c' 'd' 'e' 'f'}
w='c'
out=find(ismember(str,w))

Sara
Sara 2015 年 2 月 25 日
If your cell array includes only numbers, you can use cell2mat

カテゴリ

Help Center および File ExchangeCharacters and Strings についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by