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}