Python NumPy矩阵的结果不一致

4

我有一个包含浮点数值的矩阵,想要对列和行进行汇总。这个矩阵是对称的

>>> np.sum(n2[1,:]) #summing second row
0.80822400592582844
>>> np.sum(n2[:,1]) #summing second col
0.80822400592582844
>>> np.sum(n2, axis=0)[1]
0.80822400592582899
>>> np.sum(n2, axis=1)[1]
0.80822400592582844

它会给出不同的结果。为什么?

1
一个不太相关的注释:第一行(或列)的索引为0而不是1。 - Ohad Eytan
1个回答

2
数字 numpy 使用的是双精度浮点数,精度高达16位小数。看起来差异发生在第16位,其余数字相等。如果您不需要这种精度,可以使用四舍五入函数np.around(),或者尝试使用np.longdouble类型获得更高的精度。
您可以使用np.finfo检查类型的精度:
>>> print np.finfo(np.double).precision
>>> 15

我相信有些 NumPy 函数不支持 long double 类型,会将其转换为 double 类型,从而截断额外的位数。详情请参阅Numpy 精度问题


2
很可能这就是原因;为了完整起见,应该提到浮点数的总和取决于求和顺序,并且矩阵行或列的求和可能会以不同的顺序进行(必须查看源代码才能确定)。 - user3717023

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接