我正在尝试使用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
...
不确定如何完成此操作?开始是否正确?
答案 0 :(得分:3)
您可以使用
idx = np.where(np.abs(a-b) > 1e-6)[0]
firstidx = idx[0]
找到第一个索引,其中a
和b
中的值相差超过某些标称量,例如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
因为浮点表示的不准确性会导致a
和b
略有不同,即使它们的值完全相同,如果它们的值用无限表示精度。
所以请使用类似
的内容np.abs(a-b) > 1e-6
代替。 (请注意,您必须选择一个容差级别,例如1e-6)。
这是一个simple example,展示了使用相等比较浮点数的缺陷:
In [10]: 1.2-1.0 == 0.2
Out[10]: False