logical indexing

13 次查看(过去 30 天)
Thijs
Thijs 2012-3-14
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?

采纳的回答

Jacob Halbrooks
Jacob Halbrooks 2012-3-14
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 个评论
Aldin
Aldin 2012-3-14
result =
1 3 5
Aldin
Aldin 2012-3-14
Here is another solution:
a(b(1:5)==1)

请先登录,再进行评论。


Thijs
Thijs 2012-3-14
a(logical(b)) does what I want. In case anyone else is wondering
  2 个评论
Aldin
Aldin 2012-3-14
See above it's similiar with my solution :)
Thijs
Thijs 2012-3-14
true, thanks

请先登录,再进行评论。


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

类别

Help CenterFile Exchange 中查找有关 Matrix Indexing 的更多信息

标签

尚未输入任何标签。

Community Treasure Hunt

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

Start Hunting!

Translated by