我正在比较2个词典中的数字(总比较〜1M)。这是一段代码:
for i in dict1:
val1 = dict[i]
val2 = dict2[i]
if (val1 != 0.000):
perctg_diff = (val1 - val2)/val1 * 100
if perctg_diff > 3.0:
dict3.update({i:(val1,val2,perctg_diff)})
if (val2 !=0.000):
perctg_diff = (val2 - val1)/val2 * 100
if perctg_diff > 3.0:
dict3.update({i:(val1,val2,perctg_diff)})
我发现百分比差异并在dict3
超过3%时写出差异。执行脚本后,我发现dict3
中的一些数字是
(1052712, (2.88541545330242e-33, 2.3194405728563e-27, 99.9998755986471))
(1052713, (8.1367737331018e-34, 7.83224080670401e-31, 99.8961118033279))
(1052715, (1.79168848952333e-33, 6.71766997709614e-31, 99.733287211841))
(1052717, (1.03397638198887e-25, 4.49948480152819e-26, 56.4836791255002))
(1400879, (0.0, 1.39114642689358e-36, 100.0))
(1290291, (0.0, 1.89369462623834e-20, 100.0))
什么是有效/有效的方法我可以摆脱数字舍入并忽略数字这些小的比较?
(使用带有numpy的python 2.7)
答案 0 :(得分:1)
numpy.isclose
与您想要的一致(双关语)。我评估
公式:
绝对(a - b)< =(atol + rtol * absolute(b))
因此,您可以使用它来过滤数据,atol
您想要考虑的最小绝对差异,rtol
设置为3%。