logical indexing

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?

 Akzeptierte Antwort

Jacob Halbrooks
Jacob Halbrooks am 14 Mär. 2012

2 Stimmen

Use LOGICAL to do the type conversion:
a(logical(b))

Weitere Antworten (4)

Aldin
Aldin am 14 Mär. 2012

0 Stimmen

Here:
for i = 1:5
if b(i) == 1
disp(a(i))
end
end
:)

6 Kommentare

Aldin
Aldin am 14 Mär. 2012
If you want i can put the result 1,3,5 in an array ???
Thijs
Thijs am 14 Mär. 2012
using a for loop seems even MORE inelegant
Aldin
Aldin am 14 Mär. 2012
Thanks
Aldin
Aldin am 14 Mär. 2012
index = 0;
for i = 1:length(b)
if b(i) == 1
index = index + 1;
result(index) = a(i);
end
end
Aldin
Aldin am 14 Mär. 2012
result =
1 3 5
Aldin
Aldin am 14 Mär. 2012
Here is another solution:
a(b(1:5)==1)

Melden Sie sich an, um zu kommentieren.

Thijs
Thijs am 14 Mär. 2012

0 Stimmen

a(logical(b)) does what I want. In case anyone else is wondering

2 Kommentare

Aldin
Aldin am 14 Mär. 2012
See above it's similiar with my solution :)
Thijs
Thijs am 14 Mär. 2012
true, thanks

Melden Sie sich an, um zu kommentieren.

Onomitra Ghosh
Onomitra Ghosh am 14 Mär. 2012

0 Stimmen

Your "b" matrix is in double. You need to convert that to logical values for logical indexing:
>> a(boolean(b))
ans =
1 3 5
Aldin
Aldin am 14 Mär. 2012

0 Stimmen

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

Kategorien

Tags

Noch keine Tags eingegeben.

Community Treasure Hunt

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

Start Hunting!

Translated by