假设我有一个键列表是floats
keys = [0.999999, 1.999999]
假设我有另一个值列表。
vals = [1.0, 2.0, 3.0, 4.0, 5.0, 1.0, 1.0, 2.0]
我想找到每个key
在vals
中出现的总次数,并使用np.isclose()
测量相等性。在上面的例子中,答案是5。下面的代码片段可以返回这个答案,但是当keys
和vals
的大小更大时(10^6
和10^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]