numpy.savetxt 中的哪个 fmt 选项保持无限整数精度?

Which fmt option in numpy.savetxt keeps infinite integer precision?

我一直在使用numpy.savetxt而不指定fmt选项,有时当一个特别大的整数应该被保存时,它被记录为一个e符号作为某些有限精度的浮点数。 我希望所有整数,无论​​有多少位,都被无损记录,只包括所有数字。 但是,通读 format documentation 我不清楚哪个 fmt 选择会导致无损整数存储。

我应该使用什么合适的 fmt 设置?

In [53]: arr = np.array([1.232, 1.232423423234235352352535235253])                                   
In [54]: arr.dtype                                                                                   
Out[54]: dtype('float64')
In [55]: arr                                                                                         
Out[55]: array([1.232     , 1.23242342])

savetxt 迭代数组的 'rows',并使用 fmt:

格式化每个数组
In [56]: tuple(arr)                                                                                  
Out[56]: (1.232, 1.2324234232342353)
In [57]: '%f, %.16f'%tuple(arr)                                                                      
Out[57]: '1.232000, 1.2324234232342353'

[57] 中的操作是直接 Python 格式化。 savetxt 文档总结了这种格式,link 到完整的 Python 文档。

哎呀 - 我演示了一个浮动;你想要一个整数。 int64 是最大整数数据类型。 object dtype 可以容纳 python 个整数,但可以更长。

====

最大的数字数据类型是np.int64:

Out[86]: array([               1232, 1232423423234235352])
In [87]: arr.dtype                                                                                   
Out[87]: dtype('int64')
In [88]: '%g, %d'%tuple(arr)                                                                         
Out[88]: '1232, 1232423423234235352'

较大的整数存储为 Python 整数对象。使用此类数组的数学运算速度不快,而且不完整。

In [89]: arr = np.array([1232, 1232423423234235352999])                                              
In [90]: arr                                                                                         
Out[90]: array([1232, 1232423423234235352999], dtype=object)
In [91]: '%g, %d'%tuple(arr)                                                                         
Out[91]: '1232, 1232423423234235352999'

使用 '%s''%r',它们分别对数组的元素调用 strrepr

此外,您正在阅读错误的格式字符串文档。 (它是 numpy.savetxt 文档 link 的格式字符串文档,但它仍然是错误的。) numpy.savetxt 使用老式 % 格式,记录在 here.