我有几个不同数据类型的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
?
答案 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