Фильтровать целые числа в массиве float numpy

Есть ли встроенная функция, чтобы отменить целое число и сохранить только число с плавающей точкой в 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])

Ответ 1

Маска, с которой каждый элемент равен целому числу.

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])

Ответ 2

Я так не думаю. Мой подход

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]

Ответ 3

Я не знаю встроенной функции. Но вы можете создать его самостоятельно:

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])

Кроме того, вы не должны использовать встроенный класс, такой как input как имя переменной.

Ответ 4

Если вам не нужно много данных (короткий список), возможно, не нужно 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']

В противном случае см. Ответ Джо Иддона

Ответ 5

Я всегда использовал np.equal с np.mod:

>>> A[~np.equal(np.mod(A, 1), 0)]
array([0.01 , 2.001, 2.002])

Ответ 6

Я не знаю никаких встроенных для этого, но вы можете фильтровать эти поплавки, используя:

filter(lambda x: int(str(x).split('.')[1]) != 0, input)

Здесь выражение lambda проверяет, равны ли десятичные числа, которые я интерпретирую как число, являющееся int.