Numpy:查找包含浮点值的两个文件之间的差异

时间:2013-05-01 19:45:00

标签: python numpy

我正在尝试使用Python来计算两个文本文件之间的差异,并打印它们开始分歧的第一个值和位置。

我不确定如何使用loadtxt

import numpy as np
a = np.loadtxt("path/to/file", float)
b = np.loadtxt("path/to/file2", float)    
while np.absolute(a - b) !=0:


1
2
3
...

不确定如何完成此操作?开始是否正确?

1 个答案:

答案 0 :(得分:3)

您可以使用

idx = np.where(np.abs(a-b) > 1e-6)[0]
firstidx = idx[0]

找到第一个索引,其中ab中的值相差超过某些标称量,例如1e-6

import numpy as np

a = np.loadtxt("path/to/file", float)
b = np.loadtxt("path/to/file2", float)

idx = np.where(np.abs(a-b) > 1e-6)[0]
firstidx = idx[0]
print(firstidx, a[firstidx], b[firstidx])

请注意,在处理浮点数时,您很少想要与等式进行比较,例如

np.abs(a-b) == 0

或反过来,

np.abs(a-b) != 0

因为浮点表示的不准确性会导致ab略有不同,即使它们的值完全相同,如果它们的值用无限表示精度。

所以请使用类似

的内容
np.abs(a-b) > 1e-6

代替。 (请注意,您必须选择一个容差级别,例如1e-6)。


这是一个simple example,展示了使用相等比较浮点数的缺陷:

In [10]: 1.2-1.0 == 0.2
Out[10]: False