【问题标题】:Importing large integers from a mixed datatype file with numpy genfromtxt使用 numpy genfromtxt 从混合数据类型文件中导入大整数
【发布时间】:2013-08-17 16:30:03
【问题描述】:

我有一个格式如下的文件:

1    2.5264    24106644528  astring

我想导入数据。我正在使用:

>>> numpy.genfromtxt('myfile.dat',dtype=None)

Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    numpy.genfromtxt('myfile.dat',skip_header=27,dtype=None)
  File "C:\Python27\lib\site-packages\numpy\lib\npyio.py", line 1691, in genfromtxt
    output = np.array(data, dtype=ddtype)
OverflowError: Python int too large to convert to C long

我检查了我(32 位)系统上的最大整数:

>>> import sys
>>> sys.maxint
2147483647

有没有办法增加整数限制?或者我可以用另一种方式解决我的导入问题(不在文件中的所有整数后面加上“.0”)?

【问题讨论】:

  • 也许可以看看 genfromtxt 的 'converters' 参数? docs.scipy.org/doc/numpy/user/…
  • 因此转换器可能会尝试连续匹配 11 个整数并将其转换为浮点数

标签: python file-io types numpy genfromtxt


【解决方案1】:

意识到我可以做到:

>>> numpy.genfromtxt('myfile.dat',dtype=['i4','f8','f8','a14'])

array((1, 2.5264, 24106644528.0, 'astring'), 
  dtype=[('f0', '<i4'), ('f1', '<f8'), ('f2', '<f8'), ('f3', 'S14')])

【讨论】:

  • 哈哈,好像更简单了
  • 如果你在 32 位系统上,不会 'f8' (np.float64) 恢复到 'f4' (np.float32) 吗?如果是这种情况,上述情况会导致您失去精度。
  • @bdforbes 你的想法很有趣——虽然它似乎需要使用lambda,但我并不熟悉......
  • lambda 非常简单,但无论如何您的解决方案要好得多,前提是您知道数据在文件中的组织方式,显然您知道
猜你喜欢
  • 1970-01-01
  • 2016-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-04
  • 2011-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多