# logical indexing

90 views (last 30 days)
Thijs on 14 Mar 2012
imagine you have a two matrixes:
a=[1 2 3 4 5 6 7 8 9];
b=[1 0 1 0 1];
how do i use the b matrix as a logical index? I'd expect:
a(b)
ans =
[1 3 5]
but instead i get the error: "Subscript indices must either be real positive integers or logicals."
if I try
a(~b)
ans =
[2 4]
now I could use a(~~b) which does what i want but this seems inelegant. Can anyone suggest a better solution?
##### 0 CommentsShowHide -1 older comments

Sign in to comment.

### Accepted Answer

Jacob Halbrooks on 14 Mar 2012
Use LOGICAL to do the type conversion:
a(logical(b))
##### 0 CommentsShowHide -1 older comments

Sign in to comment.

### More Answers (4)

Aldin on 14 Mar 2012
Here:
for i = 1:5
if b(i) == 1
disp(a(i))
end
end
:)
##### 6 CommentsShowHide 5 older comments
Aldin on 14 Mar 2012
Here is another solution:
a(b(1:5)==1)

Sign in to comment.

Thijs on 14 Mar 2012
a(logical(b)) does what I want. In case anyone else is wondering
##### 2 CommentsShowHide 1 older comment
Thijs on 14 Mar 2012
true, thanks

Sign in to comment.

Onomitra Ghosh on 14 Mar 2012
Your "b" matrix is in double. You need to convert that to logical values for logical indexing:
>> a(boolean(b))
ans =
1 3 5
##### 0 CommentsShowHide -1 older comments

Sign in to comment.

Aldin on 14 Mar 2012
but what if you haven't only '1' and '0' in b array. I think it's better my first solution or second &Onomitra Ghosh his code with logical work correctly
##### 0 CommentsShowHide -1 older comments

Sign in to comment.

### Tags

No tags entered yet.

### Community Treasure Hunt

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

Start Hunting!