MATLAB Answers

alternate way , without ismember function

2 views (last 30 days)
Matlab
Matlab on 8 Oct 2020
Commented: Star Strider on 8 Oct 2020
Hi
I am having problems in using the ismember function, so I want to replace ismember and I need help in replacing the function.
Below is example code
INData = [
0.0120849609375
0.014190673828125
0.015838623046875
0.01214599609375
0.012481689453125
0.0123291015625
0.621002197265625
0.017181396484375
0.015167236328125
0.015350341796875
0.014556884765625
0.01739501953125
0.621002197265625
0.023162841796875
0.017578125
0.01361083984375
0.01239013671875
0.012115478515625
0.012451171875
0.01702880859375
0.01214599609375
0.012725830078125
0.0125732421875
0.012603759765625
0.012359619140625
0.014190673828125
0.013214111328125
0.013427734375
0.01531982421875
0.621002197265625
0.01239013671875
0.013092041015625
0.017791748046875
0.015960693359375
];
dMark = [7 13 30];
s_data = ismember(1:size(INData(:,1),1),dMark);
s_data =
1×34 logical array
0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
I need help in replacing isemember function.
Thank you

  0 Comments

Sign in to comment.

Accepted Answer

Star Strider
Star Strider on 8 Oct 2020
The ismember function is doing exactly what you told it to do! What’s the problem?

  20 Comments

Star Strider
Star Strider on 8 Oct 2020
My pleasure!
The Coder apparently does not do autoimatic explicit expansion, as MATLAB has since R2016b. In order to get the correct result, I subtracted the second argument from the first, using bsxfun, that does the expansion, so that both arguments become the same size. (There are other ways to do that, however bsxfun is the fastest and most efficient way.) The resulting matrix is 0 where the element values are the same, so the first logical operation returns a matrix where the values that are 0 as true (or 1), and using sum over the columns produces the desired vector. This creates a numeric vector that becomes a logical vector with the second logical operation, setting the elements of the vector to true if they are equal to 1. The result is the desired logical vector.
Matlab
Matlab on 8 Oct 2020
Thanks a lot for all the efforts and help. I am greatful for your explantion as well.
Star Strider
Star Strider on 8 Oct 2020
As always, my pleasure!
This was an interesting problem!

Sign in to comment.

More Answers (1)

Ameer Hamza
Ameer Hamza on 8 Oct 2020
An alternative approach
dMark = [7 13 30];
s_data = false(1, size(INData, 1));
s_data(dMark) = 1;

  3 Comments

Matlab
Matlab on 8 Oct 2020
This doesn't work,
Please check the Output of s_data
K>> s_data(dMark)
ans =
1×3 logical array
1 1 1
expected out is
s_data1 =
1×34 logical array
Columns 1 through 32
0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
Columns 33 through 34
0 0
Ameer Hamza
Ameer Hamza on 8 Oct 2020
Don't check the output of s_data(dMark). Just run
s_data
after running my code.
Matlab
Matlab on 8 Oct 2020
Your interpretation is right s_data give right output!

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!