[Numpy-discussion] Matching 0-d arrays and NumPy scalars

Konrad Hinsen konrad.hinsen at laposte.net
Fri Feb 22 02:42:40 EST 2008


On 21.02.2008, at 18:40, Alan G Isaac wrote:

>>>> x = N.array([1,2],dtype='float')
>>>> x0 = x[0]
>>>> type(x0)
>     <type 'numpy.float64'>
>>>>
>
> So a "float64 value" is whatever a numpy.float64 is,
> and that is part of what is under discussion.

numpy.float64 is a very recent invention. During the first decade of  
numerical arrays in Python (Numeric), typ(x0) was the standard Python  
float type. And even today, what you put into an array (via the array  
constructor or by assignment) is Python scalar objects, mostly int,  
float, and complex.

The reason for defining special types for the scalar elements of  
arrays was efficiency considerations. Python has only a single float  
type, there is no distinction between single and double precision.  
Extracting an array element would thus always yield a double  
precision float, and adding it to a single-precision array would  
yield a double precision result, meaning that it was extremely  
difficult to maintain single-precision storage across array  
arithmetic. For huge arrays, that was a serious problem.

However, the intention was always to have numpy's scalar objects  
behave as similarly as possible to Python scalars. Ideally,  
application code should not see a difference at all. This was largely  
successful, with the notable exception of the coercion problem that I  
mentioned a few mails ago.

Konrad.




More information about the NumPy-Discussion mailing list