2012-06-03 17 views

Respuesta

244

Utilice el método 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

Sólo asegúrese de que no tiene 'np. inf'or 'np.nan' en su matriz, ya que tienen resultados sorprendentes. Por ejemplo, 'np.array ([np.inf]). Astype (int)' salidas 'array ([- 9223372036854775808])'. – Garrett

50

Algunas funciones numpy de cómo controlar el redondeo: rint, floor, trunc, ceil. dependiendo de cómo desee rodear los flotadores, arriba, abajo o al int más cercano.

>>> 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.]]) 

Para hacer uno de esto en a int, o uno de los otros tipos de numpy, astype (como respondidas por BrenBern):

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

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

Exactamente lo que estaba buscando. 'astype' a menudo es demasiado genérico, y creo que probablemente sea más útil al hacer conversiones de intx - inty. Cuando quiero hacer float, la conversión int puede elegir el tipo de redondeo y es una buena característica. – Bakuriu

+6

Entonces, la forma más sencilla de convertir de manera segura casi-ints como '7.99999' a tintas como' 8', es 'np.rint (arr) .astype (int)'? – endolith

+0

de cualquier manera en numpy para hacerlo uint8? – Ryan

6

puede utilizar 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

Si no está seguro de que su entrada va a ser una matriz Numpy, puede usar asarray con dtype=int en lugar de astype:

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

Si la matriz de entrada ya tiene el dtype correcta, asarray evita la copia matriz mientras astype no (a menos que se especifique 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 
Cuestiones relacionadas