我试图将一些数字放入numpy数组中
>>> np.array([20000001]).astype('float32')
array([ 20000000.], dtype=float32)
Run Code Online (Sandbox Code Playgroud)
1去了哪里?
你根本没有足够的精确度.在float32仅具有大约 7位数字的准确性,而float64具有大约16的精度位数.因此,无论何时转换为a float32,它都只能保证在10 ^ 7的大约一部分内"正确".所以,例如,你可以试试这个:
>>> np.array([20000001]).astype('float64')
array([ 20000001.])
Run Code Online (Sandbox Code Playgroud)
这是预期的答案.(dtype=float64自动省略,因为这是默认值.)事实上,你可以进一步找到
>>> np.array([2000000000000001]).astype('float64')[0]
2000000000000001.0
Run Code Online (Sandbox Code Playgroud)
但
>>> np.array([20000000000000001]).astype('float64')[0]
20000000000000000.0
Run Code Online (Sandbox Code Playgroud)
在某些时候,无论你的精确度有多高,你总会达到floats降低最低有效数字的程度.有关s的更多信息,请参见此处float.
另一方面,python的int对象有更多可以跟踪的数字.在python 3中,它实际上是无限的.所以ints基本上具有无限精度.有关s的更多信息,请参见此处int.