python3 histograma hist python numpy scipy

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.