[Numpy-discussion] comparing string array with None raises ValueError, more opinions please
Todd Miller
jmiller at stsci.edu
Thu Jun 24 12:15:02 EDT 2004
On Thu, 2004-06-24 at 14:53, Rick White wrote:
> On 24 Jun 2004, Todd Miller wrote:
>
> > OK, I see your point. I talked it over with Perry and he made a
> > reasonable case for allowing comparisons with None (or any object).
> > Perry argued that since None is a common default parameter value, it
> > might simplify code to not have to add logic to handle that case.
> >
> > If no one objects, I'll change numarray.strings so that comparison of a
> > string array with any object not convertible to a string array results
> > in an array of False values.
> >
> > Any objections?
>
> Hmm, before you do that you might look at this:
>
> >>> import numarray
> >>> b = numarray.zeros(10)
> >>> b==0
> array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1], type=Bool)
> >>> b==None
> 0
>
> So comparing numeric arrays to None returns a scalar false value since
> the variable b is not None.
Oh yeah... I forgot about that. Numeric comparisons have a special
case for None and blow up for most other arbitrary objects. So there's
also:
>>> a= numarray.arange(100)
>>> a == None
0
>>> class foo:
.. pass
..
>>> a == foo
Traceback (most recent call last):
..
TypeError: UFunc arguments must be numarray, scalars or numeric
sequences
> I figure that the behavior of comparisons to None for string arrays
and
> numeric arrays ought to be consistent. I don't know which is
> preferred...
So the two choices now on the table are:
1. Change string equality comparisons to return an array of false or
true for objects which don't convert to strings. Change Numeric
equality comparisons in a similar fashion.
2. Special case string equality comparisons for None, as is done with
numerical comparisons. Raise a type error for objects (other than None)
which don't convert to string arrays.
I think I like 2. Other opinions on 1 & 2? Other choices?
Regards,
Todd
More information about the NumPy-Discussion
mailing list