logical indexing
Mostrar comentarios más antiguos
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?
Respuesta aceptada
Más respuestas (4)
Aldin
el 14 de Mzo. de 2012
Here:
for i = 1:5
if b(i) == 1
disp(a(i))
end
end
:)
6 comentarios
Aldin
el 14 de Mzo. de 2012
If you want i can put the result 1,3,5 in an array ???
Thijs
el 14 de Mzo. de 2012
Aldin
el 14 de Mzo. de 2012
Thanks
Aldin
el 14 de Mzo. de 2012
index = 0;
for i = 1:length(b)
if b(i) == 1
index = index + 1;
result(index) = a(i);
end
end
Aldin
el 14 de Mzo. de 2012
result =
1 3 5
Aldin
el 14 de Mzo. de 2012
Here is another solution:
a(b(1:5)==1)
Onomitra Ghosh
el 14 de Mzo. de 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
Aldin
el 14 de Mzo. de 2012
0 votos
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
Categorías
Más información sobre Matrix Indexing en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!