簡體   English   中英

過濾numpy浮點數組中的整數

[英]Filter integers in numpy float array

是否有任何內置函數可以丟棄整數並在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])

掩碼每個元素是否等於整數。

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

我不這么認為。 我的方法是

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]

我知道沒有內置功能。 但你可以自己創建一個:

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等內置類作為變量名。

我一直使用np.equalnp.mod

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

如果您沒有太多數據(短名單),可能不需要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回答

我不知道任何內置功能,但您可以使用以下方法過濾這些浮動:

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

這里的lambda表達式檢查小數位是否為零,我將其解釋為數字為int。

不久前我有一個類似的問題: Numpy: Check if float array contains entire numbers 我目前知道的屏蔽分數的最簡單方法是

mask = ((input % 1) != 0)

然后您可以直接使用面膜

output = input[mask]

困擾我的是沒有內置函數來快速確定浮點數的整數,所以我寫了一個 ufunc ,你可以從github下載並編譯,如果你有興趣:

from isint_ufunc import isint

output = input[~isint(input)]

我會看看 numpy 社區是否想要考慮將類似的東西添加到核心庫中。 這個問題似乎經常出現,足以證明它的合理性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM