On 7/9/2013 7:44 PM, Jeff wrote: > I am trying to find the smallest nonzero magnitude element of a vector, > D. Note that D is not integers. I am eliminating nonzero entries using > the `find` command (first line below). The editor says to replace `find` > with logical indexing, but replacing `D(find(D))` with `D(D)` returns an > error. This is not slowing my code very much, but the editor's warning > is mildly bothersome. How do I use logical indexing to fix this? > > nonZeroD = abs(D(find(D)));
nonZeroD = abs(D(D~-0));
> lambda = max(nonZeroD(nonZeroD == min(nonZeroD))); > ICmode = find(D==lambda, 1, 'first'); > > I also note that the editor doesn't complain about the second `find`.
Depends on what's done w/ the result. In the second you're using the truncated version of returning only the first position so logical addressing doesn't work so cleanly.
I'm not absolutely positive I follow what you're trying to do but why isn't it just
DNZmin=min(abs(D(D~-0))); % ?
What's the point of the max(DNZ(DNZ==min(DNZ)))? If you've only collected terms in the vector ==min(vector), then the max is the min by that selection process.