python - 为什么 numpy.sum() 在同一个矩阵上以不同的顺序给出不同的结果,而 sum() 却没有?
问题描述
当我初始化两个随机矩阵(此处为形状 (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() 函数却没有!
解决方案
推荐阅读
- c# - MdiLayout.TileVertical 无法正常工作
- python - 我无法加载 polls/detail.html
- c# - 有没有办法让 WinForms DataGridView 有一列显示记录中的多个值
- javascript - window.open 打开空白页 IE9
- git - GitLab - HTTP Basic:访问失败
- java - 如何在java中验证keycloak用户
- asp.net - 通过 Ajax 返回后,如何将 JSON 对象列表中的值打印到 div?
- java - Spring mvc过滤器不生效
- html - 拒绝应用样式,因为不支持 MIME 类型
- sql - 使用 OpenQuery 和参数执行存储过程