python - 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。
您是否知道为什么会发生这种情况以及我可以做些什么来解决它?
解决方案
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]
...