MATLAB Answers

A very quick question

1 view (last 30 days)
Radoslav Gagov
Radoslav Gagov on 12 Apr 2017
Commented: Radoslav Gagov on 12 Apr 2017
Hello Guys. Can you tell me how can I write a code that is like
>> [ida,idb] = ismember('1','1 0 0 1')
ida =
logical
1
idb =
1
but the outpoot i need is
idb =
[1 4]
I suppose it can be made with a double loop or smth, but I am looking for a simpler way.

  2 Comments

Stephen Cobeldick
Stephen Cobeldick on 12 Apr 2017
@Radoslav Gagov: do the inputs have to be strings ? Or can they be numeric?
Radoslav Gagov
Radoslav Gagov on 12 Apr 2017
Normally they are numeric or logical

Sign in to comment.

Answers (2)

David J. Mack
David J. Mack on 12 Apr 2017
Edited: David J. Mack on 12 Apr 2017
Hey Radoslav,
In general, to convert a logical array to ids use find.
If you are working on numbers (as implied in your example) try
idb = find(ismember(1,[1 0 0 1])) % No quotes!
If you work on strings, either use a "set" with a cellstr:
idb = find(ismember('1',{'1','0','0','1'}))
Or better, use strfind without the spaces.
str = '1 0 0 1';
idb = strfind('1',str(~isspace(str))); % Remove spaces
Hope that helps.
Greetings, David

  0 Comments

Sign in to comment.


Andrei Bobrov
Andrei Bobrov on 12 Apr 2017
Edited: Andrei Bobrov on 12 Apr 2017
A = '1 0 0 1';
B = '1';
An = A - '0';
Bn = B - '0';
An = An(An >= 0);
Bn = Bn(Bn >= 0);
idb = find(Bn == An);
for numeric
idb = find(B == A);

  2 Comments

Radoslav Gagov
Radoslav Gagov on 12 Apr 2017
Hmm that works thanks. Can you just explain to me why do we make that An = A - '0'. What does this like actually do ?
Radoslav Gagov
Radoslav Gagov on 12 Apr 2017
O yes i found out why. U are transforming the chars in to numbers, but i still dont get it what does - '0' does.

Sign in to comment.

Sign in to answer this question.

Tags