numpy 数组中的浮点精度与其元素不同
float precision in numpy arrays differ from their elements
我有 numpy.float32
类型的值,以及 dtype="float32"
.
的 numpy 数组
当直接使用单个数组元素引用输出值的表示时,我得到的精度与输出数组对象本身的表示时的精度不同。
随后的计算也有点偏差,所以后一个值似乎是在后续向量/矩阵算法中使用的值。
为什么会有差异,这些精度"anomalies"必须手动处理吗?
>>> a = math.pi / 2
>>> a
1.5707963267948966
>>> elementx = numpy.float32(math.cos(a))
>>> arrayx = numpy.array([elementx], dtype="float32")
>>> elementx
6.1232343e-17
>>> arrayx
array([ 6.12323426e-17], dtype=float32)
>>> t = numpy.float32(3.0)
>>> t * elementx
1.8369703e-16
>>> t * arrayx
array([ 1.83697028e-16], dtype=float32)
(Python 3.5.2, GCC 5.4.0, linux 4.4.0-21-generic)
这些只是字符串表示的不同,值是相同的,计算并没有错。
>>> (t * elementx) == (t * arrayx)[0]
True
我有 numpy.float32
类型的值,以及 dtype="float32"
.
当直接使用单个数组元素引用输出值的表示时,我得到的精度与输出数组对象本身的表示时的精度不同。
随后的计算也有点偏差,所以后一个值似乎是在后续向量/矩阵算法中使用的值。
为什么会有差异,这些精度"anomalies"必须手动处理吗?
>>> a = math.pi / 2
>>> a
1.5707963267948966
>>> elementx = numpy.float32(math.cos(a))
>>> arrayx = numpy.array([elementx], dtype="float32")
>>> elementx
6.1232343e-17
>>> arrayx
array([ 6.12323426e-17], dtype=float32)
>>> t = numpy.float32(3.0)
>>> t * elementx
1.8369703e-16
>>> t * arrayx
array([ 1.83697028e-16], dtype=float32)
(Python 3.5.2, GCC 5.4.0, linux 4.4.0-21-generic)
这些只是字符串表示的不同,值是相同的,计算并没有错。
>>> (t * elementx) == (t * arrayx)[0]
True