我正在进行一些标准化操作,令我惊讶的是,当尝试恢复该操作时,assert_array_almost_equal
的默认 6 位十进制精度出现 100% 的不匹配。为什么会出现这种情况?难道是因为我的最大值的精度问题?如果是这样,如何在 numpy.ndarray.max() 中获得更高的精度?
from __future__ import division
import numpy
_max = numpy.float128(67.1036) # output of numpy.ndarray.max() on an a float32 array
def divide_and_mult(x, y):
return numpy.divide(numpy.float128(x), y) * y
for i in range(100):
try: numpy.testing.assert_array_equal(divide_and_mult(i, _max), numpy.float128(i))
except AssertionError, e: print e
最佳答案
使用 numpy 数组无法获得比 float128
更高的精度,在大多数系统上,最好的精度甚至更低:float64
。
通常你不关心精度的一点损失并使用 np.testing.assert_almost_equal
或类似的函数,可让您测试特定的绝对和/或相对差异。
如果您想以更高的精度执行此操作,则需要使用具有无限或至少用户定义精度的类型:decimal.Decimal
或fractions.Fraction
或者切换到符号数学库,例如 sympy
.
关于python - 恢复标准化操作时的精度问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45859035/