计数浮点数数组中浮点数的出现次数



假设我有一个键列表是floats

keys = [0.999999, 1.999999]

假设我有另一个值列表。

vals = [1.0, 2.0, 3.0, 4.0, 5.0, 1.0, 1.0, 2.0]

我想找到每个keyvals中出现的总次数,并使用np.isclose()测量相等性。在上面的例子中,答案是5。下面的代码片段可以返回这个答案,但是当keysvals的大小更大时(10^610^7, resp.),它会非常慢。

def count_float_keys(keys,vals):
count = 0
for key in keys:
present = np.where(np.isclose(vals,key))[0]
count += len(present)
return count

是否有更快更干净的替代方法?

编辑:0.99999只是一个简化的例子。我的数据有随机浮点值,如0.035014,我不允许进一步舍入。

给你:

# generate random vals
vals = np.random.randint(0,2,(10,10)) + np.random.uniform(0,1,(10,10))
keys = [0.999999, 1.999999]
# check how often each value is in the tolerance of each key
res = [np.sum(np.isclose(vals,k, rtol=0.1, atol=0.1)) for k in keys]

最新更新