[SciPy-dev] asscalar and asarray in numpy

Hoyt Koepke hoytak at gmail.com
Sat May 17 12:48:48 EDT 2008


Hello,

Perhaps I'm misunderstanding things, I'm a bit surprised that asscalar
cannot take a scalar argument, i.e.

d = asscalar(1.0)

doesn't work.  Although the doc string specifies that it returns the
scalar part of a single element array, my assumption about this
method's behavior based on how asarray is used is that it should
accept anything that can be turned into a scalar and do the conversion
based on that, i.e. we can use it to ensure that a particular type is
a scalar.

The current code in the function is:

def asscalar(a):
    """Convert an array of size 1 to its scalar equivalent.
    """
    return a.item()


I'm thinking it would be reasonable to replace this by something more
robust, perhaps:

def asscalar(a):
    """Convert the input to its scalar equivalent, if possible.
    """
    if numpy.isscalar(a):
        return a
    elif isinstance(a, numpy.ndarray):
        return a.item()
    else:
        raise TypeError("Argument cannot be converted to a scalar.")

This is untested, and I may be missing subtleties in how I'm doing
this -- if so, let me know.  I'd be happy to write a unit test if
people want this change.

Those worried about speed can just use the a.item() method directly.

Am I misunderstanding the reasoning behind the as* functions, or is
this reasonable?

Thanks,
--Hoyt






-- 
+++++++++++++++++++++++++++++++++++
Hoyt Koepke
UBC Department of Computer Science
http://www.cs.ubc.ca/~hoytak/
hoytak at gmail.com
+++++++++++++++++++++++++++++++++++



More information about the SciPy-Dev mailing list