首页 > 解决方案 > numpy 减去两个数组:输出

问题描述

所以我想减去两个numpy数组a和b:

a=[[ 1. 0.85979163 0. 0.11766047 0.19353699]
[ 0.8589698 1. 0.24111901 0. 0. ]
[ 0. 0.24554123 1. 0.09234979 0.07125199]
[ 0.31269982 0.22558714 0.29298401 1. 0.475543 ]
[ 0.18880995 0. 0.06580817 0.32276821 1. ]]


b=[[1 1 1 1 1]
[1 1 1 1 1]
[1 1 1 1 1]
[1 1 1 1 1]
[1 1 1 1 1]]

当我使用以下命令时:

y=numpy.subtract(b,a)

我得到一个输出数组:

y= [[ -2.22044605e-16 1.40208370e-01 1.00000000e+00 8.82339528e-01
8.06463005e-01]
[ 1.41030195e-01 0.00000000e+00 7.58880995e-01 1.00000000e+00
1.00000000e+00]
[ 1.00000000e+00 7.54458767e-01 -2.22044605e-16 9.07650211e-01
9.28748013e-01]
[ 6.87300178e-01 7.74412855e-01 7.07015986e-01 0.00000000e+00
5.24457002e-01]
[ 8.11190053e-01 1.00000000e+00 9.34191829e-01 6.77231787e-01
0.00000000e+00]]

它如何输出这些值真的让我很困惑。

当我尝试排除故障并执行以下操作时:

y=b[0,0]-a[0,0]

我得到 y=0.. 这是有道理的,因为我会减去 1-1。但是在输出数组中,我得到的值是 -2.22044605e-16。

您是否知道为什么会发生这种情况以及我可以做些什么来解决它?

标签: pythonnumpy

解决方案


e-16本质上是0. 在处理浮点数时,您通常无法避免数值精度错误。但是,如果这对您很重要,您总是可以在之后将微小的值精确地削减为 0。请注意,您可能只1.在打印时看到,a因为 numpy 在打印数组时默认不显示完整精度。尝试一下print(a[0,0]),您可能会看到类似1.00000000005. 例如尝试打印np.array([1.000000001])and np.array([1.000000001])-1, and np.array([1.000000001])[0]...


推荐阅读