Using strcmp on multiple strings to get a logical array
Ältere Kommentare anzeigen
I want to check for the occurrence of 3 possible events in a series of events..
Event = ['a1','b1','a1','c1','b1']';
Check = {'a1','b1','c1'}';
LogA(:,1) = strcmp(Event,Check{1});
LogA(:,2) = strcmp(Event,Check{2});
LogA(:,3) = strcmp(Event,Check{3});
This gives me a 5x3 logical array, but is there a way to do it without calling each column individually? i.e., what if I had 100 strings I wanted to check for and the goal was to have a 5x100 logical array? I don't want to use a "for-loop". I'm assuming there is some matrix way to do this.
1 Kommentar
Jan
am 15 Jan. 2017
Note:
Event = ['a1','b1','a1','c1','b1']';
is the same as:
Event = ('a1b1a1c1b1').';
Most likely you mean a cell string instead.
Akzeptierte Antwort
Weitere Antworten (2)
Another option which may or may not be faster than cellfun(...):
Event = {'a1','b1','a1','c1','b1'}';
Check = {'a1','b1','c1'}';
LogA = false(numel(Event), numel(Check));
[~, loc] = ismember(Event, Check);
LogA(sub2ind(size(LogA), 1:numel(Event), loc.')) = true
John BG
am 13 Jan. 2017
Marc
1.
If all 2nd halves of the strings contained in Event is '1', it is reasonable to ignore the entire column:
Event = ['a1';'b1';'a1';'c1';'b1'];
Event_num=double(Event)
=
97 49
98 49
97 49
99 49
98 49
E=Event_num(:,1)';
E =
97 98 97 99 98
2.
Same applies to Checks
Check = ['a1';'b1';'c1'];
Check_num=double(Check)
=
97 49
98 49
99 49
C=Check_num(:,1)';
C =
97 98 99
3.
Occurence of events are listed in variable occ
[Lie,occ]=ismember(E,C)
Lie =
1 1 1 1 1
occ =
1 2 1 3 2
4.
check
Check(occ)
=
abacb
meaning occ contains the occurrences: a1 b1 a1 c1 b1
if you find these lines useful would you please mark my answer as Accepted Answer?
To any other reader, if you find this answer of any help please click on the thumbs-up vote link,
thanks in advance for time and attention
John BG
5 Kommentare
Jan
am 13 Jan. 2017
There is no advantage in converting the strings to doubles, because ismember works on CHAR-arrays directly.
John BG
am 13 Jan. 2017
Well, it's Marc's question, why don't you let Marc decide?
John BG
am 14 Jan. 2017
To Marc Cousloulis:
did you mark this question as Accepted Answer or did some one else mark it as if you had accepted it?
Kategorien
Mehr zu Characters and Strings finden Sie in Hilfe-Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!