Search All of the Math Forum:

Views expressed in these public forums are not endorsed by NCTM or The Math Forum.

Notice: We are no longer accepting new posts, but the forums will continue to be readable.

Topic: Replacing `find` with logical indexing
Replies: 6   Last Post: Jul 10, 2013 1:47 PM

 Messages: [ Previous | Next ]
 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.
>
> --

Date Subject Author
7/9/13 Jeff
7/9/13 dpb
7/9/13 Jeff
7/9/13 Derek Goring
7/9/13 dpb
7/10/13 Jeff
7/10/13 dpb