Hi all, I am trying to read some 19-digit integers using loadtxt (or genfromtxt -- same problem). The numbers are smaller than the max int64 (and the max uint64 -- same problem with either one). Below, Out[184] shows that python has no problem with the conversion, but loadtxt gets the last few digits wrong in Out[185]. Am I doing something stupid? Yours, Andrew In [175]: import numpy as np In [176]: np.__version__ Out[176]: '1.4.0' In [177]: from StringIO import StringIO In [178]: fc = """1621174818000457763 1621209600996363377 1621258907994644735 1621296000994995765 1621374194996298305 """ In [184]: long(fc[:19]) Out[184]: 1621174818000457763L In [185]: np.loadtxt(StringIO(fc), dtype=np.int64) Out[185]: array([1621174818000457728, 1621209600996363264, 1621258907994644736, 1621296000994995712, 1621374194996298240], dtype=int64)
Hi,
I am trying to read some 19-digit integers using loadtxt (or genfromtxt -- same problem). The numbers are smaller than the max int64 (and the max uint64 -- same problem with either one).
Below, Out[184] shows that python has no problem with the conversion, but loadtxt gets the last few digits wrong in Out[185].
Am I doing something stupid?
Yours,
Andrew
In [175]: import numpy as np
In [176]: np.__version__ Out[176]: '1.4.0'
In [177]: from StringIO import StringIO
In [178]: fc = """1621174818000457763 1621209600996363377 1621258907994644735 1621296000994995765 1621374194996298305 """
In [184]: long(fc[:19]) Out[184]: 1621174818000457763L
In [185]: np.loadtxt(StringIO(fc), dtype=np.int64) Out[185]: array([1621174818000457728, 1621209600996363264, 1621258907994644736, 1621296000994995712, 1621374194996298240], dtype=int64)
The slightly hack-ish solution is to explicitly use the python long() function as a converter: In [215]: np.loadtxt(StringIO(fc), dtype=np.int64, converters={0:long}) Out[215]: array([1621174818000457763, 1621209600996363377, 1621258907994644735, 1621296000994995765, 1621374194996298305], dtype=int64)
participants (1)
-
Andrew Jaffe