Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Specifying default dtype for np.array(1.)

Tags:

python

numpy

Is there a way to specify default dtype that's used with constructs like np.array(1.)?

In particular I want np.array(1.) to be np.float32 and np.array(1) to be np.int32. Instead I'm getting np.float64 and np.int64

like image 488
Yaroslav Bulatov Avatar asked Apr 14 '16 22:04

Yaroslav Bulatov


People also ask

What is the default datatype in NumPy array?

The default data type: float_ . The 24 built-in array scalar type objects all convert to an associated data-type object.

How do I change the Dtype of a NP array?

In order to change the dtype of the given array object, we will use numpy. astype() function. The function takes an argument which is the target data type. The function supports all the generic types and built-in types of data.

What is default Dtype in Python?

On a 64-bit system, default types will be 64-bit. On a 32-bit system, default types will be 32-bit. There is no way to change the default short of re-compiling numpy with a different system C header. You can of course specify dtypes explicitly, e.g. >>> x = np.array(1, dtype='int32')

Can NP array have different data types?

While a Python list can contain different data types within a single list, all of the elements in a NumPy array should be homogeneous.


2 Answers

The default depends on your system. On a 64-bit system, default types will be 64-bit. On a 32-bit system, default types will be 32-bit. There is no way to change the default short of re-compiling numpy with a different system C header.

You can of course specify dtypes explicitly, e.g.

>>> x = np.array(1, dtype='int32')

Edit: as kazemakase mentions below, the above is only true for int32/int64. In recent numpy versions, the default for floating-point is float64 regardless of the system.

like image 50
jakevdp Avatar answered Oct 02 '22 08:10

jakevdp


You could use np.float32 or np.int32 as np.ndarray constructor:

>>> np.float32([1.])
array([ 1.], dtype=float32)
>>> np.int32([1])
array([1], dtype=int32)

but that returns a numpy-scalar if given a scalar input (not a rank 0 array):

>>> np.float32(1)
1.
>>> np.asarray(np.float32(1))  # Use np.asarray to convert it to an array
array(1.0, dtype=float32)

Redefining the default dtype seems to be not so easy, see also:

  • How to set the default datatype as 'float32' for numpy & pandas?
  • Can i set float128 as the standard float-array in numpy
  • Python: Making numpy default to float32

If you don't care additional overhead you can always use a dictionary as "switch" to get correct dtype for those you find inappropriate:

defaults = {np.dtype('int64'): np.int32,
            np.dtype('float64'): np.float32}

before = 1.
np.array(before, dtype=defaults.get(np.result_type(before), None))

This will however fail with complicated types like characters (strings) or objects.

like image 28
MSeifert Avatar answered Oct 02 '22 07:10

MSeifert