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 anp.int_
,bool
medionp.bool_
quefloat
esnp.float_
ycomplex
esnp.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.