numpy减去两个数组:输出

时间:2018-09-24 00:51:52

标签: 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。

您是否知道为什么会发生这种情况以及我该如何解决?

1 个答案:

答案 0 :(得分:2)

e-16本质上是0。在处理浮点数时,通常无法避免数值精度错误。但是,如果对您来说很重要,那么始终可以将微小值精确地切为0。请注意,打印1.时可能会看到a,这仅是因为numpy在打印数组时默认不显示全精度。尝试使用print(a[0,0]),您可能会看到类似1.00000000005的内容。例如,尝试打印np.array([1.000000001])np.array([1.000000001])-1,以及np.array([1.000000001])[0] ...