MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Working with Indeterminate in large numerical lists

  • To: mathgroup at smc.vnet.net
  • Subject: [mg100241] Re: Working with Indeterminate in large numerical lists
  • From: Bill Rowe <readnews at sbcglobal.net>
  • Date: Fri, 29 May 2009 20:56:32 -0400 (EDT)

On 5/28/09 at 4:28 AM, pfalloon at gmail.com (pfalloon) wrote:

>Hi everyone, I'm wondering about the optimal way to work with
>Indeterminate in large matrices. I've been using this to replace
>"bad" data points that I want to prevent from polluting calculations
>involving lists of data, but I'm not sure I'm working as smartly as
>I could be.

>As an example, suppose I have a list of machine-precision reals and
>some Indeterminate elements:

>x = RandomSample[Join[RandomReal[1, 1000], ConstantArray
>[Indeterminate, 10]];

>If I want to take only the valid entries, the best I have been able
>to find is something like:

>Select[x, NumberQ]

>This seems to work reasonably well. But if I want to specifically
>select the Indeterminate entries, there doesn't seem to be any
>function (equivalent to, say, "isnan" from another system), so I
>have to resort to something less succinct like

>Select[x, #  === Indeterminate &]

If the goal is to select the non-numeric entries there are a
number of ways to do so in addition to what you show above. When
you do Select[x, NumberQ] what you are doing is using shorthand for

Select[x, NumberQ@#&]

You can use essentially this same syntax to get the non-numeric
entries by simply negating the selection criteria, i.e.

Select[x !NumberQ@#&]

or instead of Select you can use Cases, i.e.,

Cases[x, Indeterminate]

But it seems to me the only reason to select the non-numeric
entries would be to remove them from other computations. This
can be directly done using say DeleteCases. For example,

DeleteCases[x, Indeterminate]

will eliminate the Indeterminate entries

One other thing to keep in mind. Using NumberQ will not select
things like Pi which have numeric values. That is

In[7]:= Select[{Pi, E}, NumberQ]

Out[7]= {}

In general for selecting numeric values you want to use NumericQ
instead of NumberQ, i.e.,

In[8]:= Select[{Pi, E}, NumericQ]

Out[8]= {Pi, E}



  • Prev by Date: Re: Parallel processing
  • Next by Date: Re: Working with Indeterminate in large numerical lists
  • Previous by thread: Re: Working with Indeterminate in large numerical lists
  • Next by thread: Re: Working with Indeterminate in large numerical lists