histograma - python numpy histogram
Convierte ndarray de float64 a entero (3)
Tengo un ndarray
en python con un dtype
de float64
. Me gustaría convertir la matriz en una matriz de enteros. ¿Cómo debería hacer esto?
int()
no funcionará, ya que dice que no puede convertirlo a escalar. Cambiar el campo dtype
sí mismo obviamente no funciona, ya que los bytes reales no han cambiado. Parece que no puedo encontrar nada en Google ni en la documentación: ¿cuál es la mejor manera de hacerlo?
Si bien el astype
es probablemente la "mejor" opción, existen otras formas de convertirlo en una matriz de enteros. Estoy usando este arr
en los siguientes ejemplos:
>>> import numpy as np
>>> arr = np.array([1,2,3,4], dtype=float)
>>> arr
array([ 1., 2., 3., 4.])
Las funciones int*
de NumPy
>>> np.int64(arr)
array([1, 2, 3, 4])
>>> np.int_(arr)
array([1, 2, 3, 4])
La *array
NumPy *array
funciona por sí misma:
>>> 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])
El método astype
(que ya se mencionó pero para completarlo):
>>> arr.astype(int)
array([1, 2, 3, 4])
Tenga en cuenta que pasar int
como dtype a astype
o array
se astype
defecto en un tipo de entero por defecto que depende de su plataforma. Por ejemplo, en Windows será int32
, en 64 bits Linux con 64 bits Python es int64
. Si necesita un tipo de entero específico y desea evitar la "ambigüedad" de la plataforma, debe usar los tipos de NumPy correspondientes, como np.int32
o np.int64
.
También hay una discusión realmente útil sobre la conversión de la matriz en su lugar, la conversión de tipo in situ de una matriz NumPy . Si le preocupa copiar su matriz (que es lo que astype()
sí), definitivamente revise el enlace.
Utilice .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])
Vea la documentation para más opciones.