Search All of the Math Forum:
Views expressed in these public forums are not endorsed by
NCTM or The Math Forum.


Jeff
Posts:
113
Registered:
11/22/09


Re: Replacing `find` with logical indexing
Posted:
Jul 9, 2013 10:19 PM


dpb <none@non.net> wrote in message <krict2$9cb$1@speranza.aioe.org>... > 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)); Is that supposed to be abs(D(D~=0))? I get an error using 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))); % ? Yes, it is just that. You find the indexes of the nonzero positions, select those values of D, take the absolute value, and take the minimum. That's what I was trying to do. > > What's the point of the max(DNZ(DNZ==min(DNZ)))? If you've only
Hmm. Good question. I developed this code slowly and at one point it was returning multiple values (if there was a tie for smallest absolute value). That code might be an artifact of me trying to get only one result out. It does look redundant to me.
> collected terms in the vector ==min(vector), then the max is the min by > that selection process. > > 



