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?

 采纳的回答

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

更多回答(4 个)

Aldin
Aldin 2012-3-14
Here:
for i = 1:5
if b(i) == 1
disp(a(i))
end
end
:)

6 个评论

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

请先登录,再进行评论。

Thijs
Thijs 2012-3-14

0 个投票

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

2 个评论

See above it's similiar with my solution :)
true, thanks

请先登录,再进行评论。

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 2012-3-14

0 个投票

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

类别

帮助中心File Exchange 中查找有关 Matrix Indexing 的更多信息

标签

尚未输入任何标签。

Community Treasure Hunt

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

Start Hunting!

Translated by