Python 为什么numpy.sum()会在同一个矩阵上以不同的顺序给出不同的结果,而sum()不会?

Python 为什么numpy.sum()会在同一个矩阵上以不同的顺序给出不同的结果,而sum()不会?,python,numpy,sum,Python,Numpy,Sum,当我初始化两个随机矩阵(这里是形状(6,2))并对行重新排序时,np.sum()将给出不同的结果。我知道这可能是由于数值错误造成的,因为差异很小,但是np.sum()对元素求和的准确程度如何?如何复制每个矩阵顺序的结果 x1 = np.array([[-0.31381854, -0.05944943], [ 0.3848904 , -0.36534384], [ 1.1122322 , 1.2480698 ],

当我初始化两个随机矩阵(这里是形状(6,2))并对行重新排序时,np.sum()将给出不同的结果。我知道这可能是由于数值错误造成的,因为差异很小,但是np.sum()对元素求和的准确程度如何?如何复制每个矩阵顺序的结果

x1 = np.array([[-0.31381854, -0.05944943],
               [ 0.3848904 , -0.36534384],
               [ 1.1122322 ,  1.2480698 ],
               [-1.4493011 ,  0.5094067 ],
               [ 0.00905334,  0.77591574],
               [ 0.25694364, -2.108599  ]], dtype=np.float32)

x2 = np.array([[-0.31381854, -0.05944943],
               [ 1.1122322 ,  1.2480698 ],
               [ 0.00905334,  0.77591574],
               [ 0.3848904 , -0.36534384],
               [-1.4493011 ,  0.5094067 ],
               [ 0.25694364, -2.108599  ]], dtype=np.float32)
    

print(np.sum(x1))
print(np.sum(x2))
0.0
-2.3841858e-07
尽管它们在每列和每行中具有完全相同的元素,但总和是不同的

如果使用sum()函数对所有元素求和,结果不会不一致:

print(sum(sum(x1)))
print(sum(sum(x2)))
-5.960464477539063e-08
-5.960464477539063e-08
当我使用python sum()函数单独对列求和时,得到的结果是相同的:

print(sum(x1[:,0]))
print(sum(x2[:,0]))
-6.705522537231445e-08
-6.705522537231445e-08

print(sum(x1[:,1]))
print(sum(x2[:,1]))
-2.9802322387695312e-08
-2.9802322387695312e-08
但同样,如果我单独对列求和,这次使用np.sum(axis=1),结果不同:

print(np.sum(x1),1)
print(np.sum(x2),1)
-2.3841858e-07 1
0.0 1
对于包含数千个元素的大型矩阵来说,这是一个问题,其中的数值不准确总结为巨大的差异


我只是不明白np.sum()是如何运行的,在某种程度上,一个简单的sum会给出如此不同的结果,而python规范的sum()函数却没有

@QuangHoang。它更简单:一个使用double,一个使用doublefloat@QuangHoang. 没有。Python没有float32类型,所以第二个sum有
sum(x1).dtype->float32
sum(sum(x1)).dtype->float64
侧注@hirchme,
print(sum(x1),1)
不是沿轴=1求和。python
sum
委托参数的
add
方法的操作。如果您想要纯Python求和,请使用
sum(x1.ravel().tolist())
。随着数据量的增大,问题将更加突出(而
float32
只会帮助将其放大更多)。