带有dtype精度的格式化浮点输出

时间:2017-01-31 17:46:02

标签: python numpy floating-point format

我有几个不同数据类型的numpy浮点数组。我现在想print,并在输出中准确包含“正确”的数字位数。天真的方法,如

import numpy as np

a = np.array([1.0 / 3.0], dtype=np.float64)
print(a)
print('%f' % a[0])

b = np.array([1.0 / 3.0], dtype=np.float16)
print(b)
print('%f' % b[0])

打印

[ 0.33333333]
0.333333
[ 0.33325195]
0.333252

这不是我想要的。我可以修改格式字符串àla%.18f,但如何调整位数到dtype

2 个答案:

答案 0 :(得分:0)

对于NumPy浮点数据类型,尾数长度为in the documenation。 有了这个,就可以了。

def dtype_digits(dt):
    if dt == numpy.float16:
        mantissa = 10
    elif dt == numpy.float32:
        mantissa = 23
    elif dt == numpy.float64:
        mantissa = 52
    else:
        raise RuntimeError('Unknown float type')
    significant_digits = mantissa * numpy.log(2) / numpy.log(10)
    return int(significant_digits)

并使用

# data = numpy.array(...)
#
fmt = '%%.%de' % dtype_digits(data.dtype)
for x in data:
    print(fmt % x)

答案 1 :(得分:0)

Python的内置repr()专为此目的而设计:

print('%r' % a[0])
0.33333333333333331

print('%r' % b[0])
0.33325