Numpy loadtxt四舍五入的数字

JMD*_*JMD 5 python numpy

我正在使用numpy loadtxt函数来读取大量数据.数据似乎四舍五入.例如:文本文件中的数字是-3.79000000000005E + 01,但是numpy以-37.9的形式读取数字.我在loadtxt调用中将dypte设置为np.float64.反正是否保持原始数据文件的精度?

unu*_*tbu 6

loadtxt没有四舍五入的数字.您看到的是NumPy选择打印阵列的方式:

In [80]: import numpy as np

In [81]: x = np.loadtxt('test.dat', dtype = np.float64)

In [82]: print(x)
-37.9
Run Code Online (Sandbox Code Playgroud)

实际值是最接近输入值的np.float64.

In [83]: x
Out[83]: array(-37.9000000000005)
Run Code Online (Sandbox Code Playgroud)

或者,在更可能的情况下,您有更高维数组,

In [2]: x = np.loadtxt('test.dat', dtype = np.float64)
Run Code Online (Sandbox Code Playgroud)

如果reprx外观截断:

In [3]: x
Out[3]: array([-37.9, -37.9])
Run Code Online (Sandbox Code Playgroud)

你可以np.set_printoptions用来获得更高的精度:

In [4]: np.get_printoptions()
Out[4]: 
{'edgeitems': 3,
 'infstr': 'inf',
 'linewidth': 75,
 'nanstr': 'nan',
 'precision': 8,
 'suppress': False,
 'threshold': 1000}

In [5]: np.set_printoptions(precision = 17)

In [6]: x
Out[6]: array([-37.90000000000050306, -37.90000000000050306])
Run Code Online (Sandbox Code Playgroud)

(感谢@mgilson指出这一点.)