在numpy浮点数组中过滤整数

时间:2018-08-30 10:14:49

标签: python 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])

6 个答案:

答案 0 :(得分:16)

将每个元素是否等于整数作为掩码。

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

答案 1 :(得分:14)

我不这么认为。我的方法是

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]

答案 2 :(得分:6)

我不知道任何内置功能。但是您可以自己创建一个:

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之类的内置类作为变量名。

答案 3 :(得分: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']

否则,请参见Joe Iddon的答案

答案 4 :(得分:4)

我一直将np.equalnp.mod一起使用:

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

答案 5 :(得分:2)

我对此不知道任何内置函数,但是可以使用以下命令过滤这些浮点数:

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

这里的lambda表达式检查小数位是否为零(我将其解释为整数)。