[Numpy-discussion] A bug in loadtxt and how to convert a string array (hex data) to decimal?
Stéfan van der Walt
stefan at sun.ac.za
Fri Sep 19 04:52:01 EDT 2008
2008/9/18 Ryan May <rmay31 at gmail.com>:
> It's because of how numpy handles strings arrays (which I admit I don't
> understand very well.) Basically, it's converting the numbers properly,
> but truncating them to 3 characters. Try this, which just forces it to
> expand to strings 4 characters wide:
> test=loadtxt('test.txt',comments='"',dtype='|S4',converters={0:lambda
> s:int(s,16)})
Here's what happens in the background:
>>> data = [(1023, '3fE'), (1007, '3e8'), (991, '3d9'), (975, '3c7')]
>>> np.array(data, np.dtype('string'))
array([['102', '3fE'],
['100', '3e8'],
['991', '3d9'],
['975', '3c7']],
dtype='|S3')
Why? Because
>>> np.dtype('string')
dtype('|S0')
So, it grabs the width from the first string it sees.
A clean workaround then:
test = np.loadtxt('/tmp/data.txt', comments='"', dtype='string',
converters={0:lambda s: str(int(s,16))})
Cheers
Stéfan
More information about the NumPy-Discussion
mailing list