Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert ndarray from float64 to integer

I've got an ndarray in python with a dtype of float64. I'd like to convert the array to be an array of integers. How should I do this?

int() won't work, as it says it can't convert it to a scalar. Changing the dtype field itself obviously doesn't work, as the actual bytes haven't changed. I can't seem to find anything on Google or in the documentation - what's the best way to do this?

like image 378
robintw Avatar asked Jan 13 '12 18:01

robintw


People also ask

How do you convert Ndarray to int?

You can convert numpy array elements to int using the astype() method.

How do I change Dtype of Ndarray?

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.

How do you convert an array to a number?

To convert an array of strings to an array of numbers, call the map() method on the array, and on each iteration, convert the string to a number. The map method will return a new array containing only numbers. Copied! const arrOfStr = ['1', '2', '3']; const arrOfNum = arrOfStr.


2 Answers

Use .astype.

>>> a = numpy.array([1, 2, 3, 4], dtype=numpy.float64) >>> a array([ 1.,  2.,  3.,  4.]) >>> a.astype(numpy.int64) array([1, 2, 3, 4]) 

See the documentation for more options.

like image 175
kennytm Avatar answered Sep 21 '22 21:09

kennytm


While astype is probably the "best" option there are several other ways to convert it to an integer array. I'm using this arr in the following examples:

>>> import numpy as np >>> arr = np.array([1,2,3,4], dtype=float) >>> arr array([ 1.,  2.,  3.,  4.]) 

The int* functions from NumPy

>>> np.int64(arr) array([1, 2, 3, 4])  >>> np.int_(arr) array([1, 2, 3, 4]) 

The NumPy *array functions themselves:

>>> np.array(arr, dtype=int) array([1, 2, 3, 4])  >>> np.asarray(arr, dtype=int) array([1, 2, 3, 4])  >>> np.asanyarray(arr, dtype=int) array([1, 2, 3, 4]) 

The astype method (that was already mentioned but for completeness sake):

>>> arr.astype(int) array([1, 2, 3, 4]) 

Note that passing int as dtype to astype or array will default to a default integer type that depends on your platform. For example on Windows it will be int32, on 64bit Linux with 64bit Python it's int64. If you need a specific integer type and want to avoid the platform "ambiguity" you should use the corresponding NumPy types like np.int32 or np.int64.

like image 35
MSeifert Avatar answered Sep 23 '22 21:09

MSeifert