python - type - Filtrar enteros en una matriz numpy float
numpy to float (6)
¿Hay alguna función incorporada para descartar números enteros y mantener solo el número flotante en numpy
?
import numpy as np
input = np.array([0.0, 0.01, 1.0, 2.0, 2.001, 2.002])
desired_ouput = some_function(input)
# Expected ouput
# desired_output = np.array([0.01, 2.001, 2.002])
Enmascarar si cada elemento es igual a él como un entero.
arr = np.array([0.0, 0.01, 1.0, 2.0, 2.001, 2.002])
out = arr[arr != arr.astype(int)]
#np.array([0.01, 2.001, 2.002])
No conozco ningún componente incorporado para esto, pero puedes filtrar esos flotadores usando:
filter(lambda x: int(str(x).split(''.'')[1]) != 0, input)
La expresión lambda aquí verifica si los lugares decimales son cero, lo que interpreto como el número que es un int.
No conozco ninguna función incorporada. Pero puedes crear uno tú mismo:
import numpy as np
A = np.array([0.0, 0.01, 1.0, 2.0, 2.001, 2.002])
def remove_ints(arr):
return arr[~(arr == arr.astype(int))]
res = remove_ints(A)
array([ 0.01 , 2.001, 2.002])
Aparte, no debes usar una clase incorporada como input
como nombre de variable.
No lo creo. Mi enfoque sería
import numpy as np
a = np.array([0.0, 0.01, 1.0, 2.0, 2.001, 2.002])
mask = np.isclose(a, a.astype(int))
print(a[~mask])
#[ 0.01 2.001 2.002]
Si no tiene demasiados datos (lista corta), tal vez no necesite numpy
:
>>> i = [0.0, 0.01, 1.0, 2.0, 2.001, 2.002]
>>> a=[j for j in i if not j.is_integer()]
>>> a
[''0.01'', ''2.001'', ''2.002'']
De lo contrario veremos la respuesta de Joe Iddon.
Siempre he usado np.equal
con np.mod
:
>>> A[~np.equal(np.mod(A, 1), 0)]
array([0.01 , 2.001, 2.002])