Фильтровать целые числа в массиве numpy float - PullRequest
0 голосов
/ 30 августа 2018

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

Ответы [ 6 ]

0 голосов
/ 30 августа 2018

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

>>> A[~np.equal(np.mod(A, 1), 0)]
array([0.01 , 2.001, 2.002])
0 голосов
/ 30 августа 2018

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

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

0 голосов
/ 30 августа 2018

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

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])
0 голосов
/ 30 августа 2018

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

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

Здесь лямбда-выражение проверяет, являются ли десятичные разряды нулевыми, что я интерпретирую как число, являющееся целым числом.

0 голосов
/ 30 августа 2018

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

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]
0 голосов
/ 30 августа 2018

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

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, в качестве имени переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...