MATLAB: Is there a clever way to ditch ‘find’ and use logical indexing here

indexing

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

Best Answer

sorted_x = sort(x)
logical_inds = x > 0.5 & x <= sorted_x(n);