2012-06-03 20 views

risposta

244

Utilizzare il metodo astype.

>>> x = np.array([[1.0, 2.3], [1.3, 2.9]]) 
>>> x 
array([[ 1. , 2.3], 
     [ 1.3, 2.9]]) 
>>> x.astype(int) 
array([[1, 2], 
     [1, 2]]) 
+19

Basta assicurarsi che non si dispone di 'np. inf'or 'np.nan' nel tuo array, poiché hanno risultati sorprendenti. Ad esempio, 'np.array ([np.inf]). Astype (int)' output 'array ([- 9223372036854775808])'. – Garrett

50

Alcune funzioni NumPy per come controllare l'arrotondamento: rint, floor, trunc, ceil. a seconda di come si desidera arrotondare i galleggianti, su, giù o verso l'int più vicino.

>>> x = np.array([[1.0,2.3],[1.3,2.9]]) 
>>> x 
array([[ 1. , 2.3], 
     [ 1.3, 2.9]]) 
>>> y = np.trunc(x) 
>>> y 
array([[ 1., 2.], 
     [ 1., 2.]]) 
>>> z = np.ceil(x) 
>>> z 
array([[ 1., 3.], 
     [ 2., 3.]]) 
>>> t = np.floor(x) 
>>> t 
array([[ 1., 2.], 
     [ 1., 2.]]) 
>>> a = np.rint(x) 
>>> a 
array([[ 1., 2.], 
     [ 1., 3.]]) 

Per fare uno di questo a int, o uno degli altri tipi di NumPy, astype (come risposta da BrenBern):

a.astype(int) 
array([[1, 2], 
     [1, 3]]) 

>>> y.astype(int) 
array([[1, 2], 
     [1, 2]]) 
+1

Esattamente quello che stavo cercando. 'astype' è spesso troppo generico e penso che sia probabilmente più utile quando si effettuano conversioni intere. Quando voglio fare float - int conversion essere in grado di scegliere il tipo di arrotondamento è una bella funzionalità. – Bakuriu

+6

Quindi il modo più semplice per convertire in modo sicuro quasi-int come '7.99999' a ints come' 8', è 'np.rint (arr) .astype (int)'? – endolith

+0

in qualche modo in numpy per renderlo uint8? – Ryan

6

è possibile utilizzare np.int_:

>>> x = np.array([[1.0, 2.3], [1.3, 2.9]]) 
>>> x 
array([[ 1. , 2.3], 
     [ 1.3, 2.9]]) 
>>> np.int_(x) 
array([[1, 2], 
     [1, 2]]) 
5

Se non si è sicuri che l'input sarà un array Numpy, è possibile utilizzare asarray con dtype=int anziché astype:

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

Se l'array di input ha già la DTYPE corretta, asarray evita la copia matrice mentre astype non (se non si specifica copy=False):

>>> a = np.array([1,2,3,4]) 
>>> a is np.asarray(a) # no copy :) 
True 
>>> a is a.astype(int) # copy :(
False 
>>> a is a.astype(int, copy=False) # no copy :) 
True