Saltar al contenido

Cómo convertir un numpy array de ‘float64’ a ‘float’

Bienvenido a proyecto online, ahora vas a hallar la resolución de lo que estabas buscando.

Solución:

Sí, en realidad cuando usas Python nativo float para especificar el dtype para un array numpy lo convierte en float64. Como se indica en la documentación:

Tenga en cuenta que, arriba, usamos el objeto flotante de Python como un dtype. NumPy lo sabe int se refiere a np.int_, bool medio np.bool_ que float es np.float_ y complex es np.complex_. Los otros tipos de datos no tienen equivalentes de Python.

Y –

flotar_ – Abreviatura de float64.

Es por eso que a pesar de que usas float para convertir todo array para flotar, todavía usa np.float64.

De acuerdo con el requisito de la otra pregunta, la mejor solución sería convertir a un objeto flotante normal después de tomar cada valor escalar como:

float(new_array[0])

Una solución que se me ocurrió es crear una subclase para float y usar eso para el casting (aunque para mí se ve mal). Pero preferiría la solución anterior a esta si es posible. Ejemplo –

In [20]: import numpy as np

In [21]: na = np.array([1., 2., 3.])

In [22]: na = np.array([1., 2., 3., np.inf, np.inf])

In [23]: type(na[-1])
Out[23]: numpy.float64

In [24]: na[-1] - na[-2]
C:Anaconda3Scriptsipython-script.py:1: RuntimeWarning: invalid value encountered in double_scalars
  if __name__ == '__main__':
Out[24]: nan

In [25]: class x(float):
   ....:     pass
   ....:

In [26]: na_new = na.astype(x)


In [28]: type(na_new[-1])
Out[28]: float                           #No idea why its showing float, I would have thought it would show '__main__.x' .

In [29]: na_new[-1] - na_new[-2]
Out[29]: nan

In [30]: na_new
Out[30]: array([1.0, 2.0, 3.0, inf, inf], dtype=object)

Puedes crear un tipo anónimo float como esto

>>> new_array = my_array.astype(type('float', (float,), ))
>>> type(new_array[0])

Te mostramos las comentarios y valoraciones de los lectores

Si estás contento con lo expuesto, tienes el poder dejar un tutorial acerca de qué te ha gustado de este post.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *