Borrar filtros
Borrar filtros

Is there a clever way to ditch 'find' and use logical indexing here ?

2 visualizaciones (últimos 30 días)
I'm sorting an array x:
[~, ind] = sort(x)
If I want the indices of the (n) smallest elements of x, I'll simply go for:
y = ind(1:n)
Now if I want the indices of the n smallest that also are > 0.5, I go:
valid = x > 0.5
y = ind(find(valid(ind), n, 'first'))
Code Analyzer is obviously whining about using 'find', but I wonder if there really is a way to do this using only logical indexing ?
I need the indices -or logical indices- not the values themselves. I use the indices in another array that needs to have the same size as x. So I can't narrow down x to z = x > 0.5 and then sort z: z-based indices wouldn't be consistent with the size of x in that case.
Thanks
Ivan

Respuesta aceptada

Jonathan Sullivan
Jonathan Sullivan el 9 de Jul. de 2012
sorted_x = sort(x)
logical_inds = x > 0.5 & x <= sorted_x(n);
  1 comentario
Ivan
Ivan el 9 de Jul. de 2012
But doing this I will possibly end up with less than n values. I do need n values, though.
I need the (x-based indices of the) n smallest in x that are > 0.5. Not the subset of the n smallest that are also > 0.5.
Not sure it's doable with logical only...

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Creating and Concatenating Matrices en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by