[Numpy-discussion] Structured array sorting
Warren Weckesser
warren.weckesser@enthought....
Sun Jan 17 12:18:40 CST 2010
Looks like 'sort' is not handling endianess of the column data
correctly. If you change the type of the floating point data to '<f8',
the sort works. Here's another example with short ints:
-----
In [137]: z = np.array([(0,),(258,),(256,),(1,),(255,)],
dtype=[('num','<i2')])
In [138]: z.sort(order='num')
In [139]: z
Out[139]:
array([(0,), (1,), (255,), (256,), (258,)],
dtype=[('num', '<i2')])
In [140]: z = np.array([(0,),(258,),(256,),(1,),(255,)],
dtype=[('num','>i2')])
In [141]: z.sort(order='num')
In [142]: z
Out[142]:
array([(255,), (0,), (256,), (1,), (258,)],
dtype=[('num', '>i2')])
In [143]: np.__version__
Out[143]: '1.3.0'
-----
Sorting works as expected with a simple array of short ints:
-----
In [152]: w = np.array([0,258, 3, 255], dtype='<i2')
In [153]: w.data.__str__()
Out[153]: '\x00\x00\x02\x01\x03\x00\xff\x00'
In [154]: w.sort()
In [155]: w
Out[155]: array([ 0, 3, 255, 258], dtype=int16)
In [156]: w = np.array([0,258, 3, 255], dtype='>i2')
In [157]: w.data.__str__()
Out[157]: '\x00\x00\x01\x02\x00\x03\x00\xff'
In [158]: w.sort()
In [159]: w
Out[159]: array([ 0, 3, 255, 258], dtype=int16)
-----
(This is on a Mac, running OSX 10.5 with python 2.5.4.)
Warren
Thomas Robitaille wrote:
> I am having trouble sorting a structured array - in the example below, sorting by the first column (col1) seems to work, but not sorting by the second column (col2). Is this a bug?
>
> I am using numpy svn r8071 on MacOS 10.6.
>
> Thanks for any help,
>
> Thomas
>
> Python 2.6.1 (r261:67515, Jul 7 2009, 23:51:51)
> [GCC 4.2.1 (Apple Inc. build 5646)] on darwin
> Type "help", "copyright", "credits" or "license" for more information.
>
>>>> import numpy as np
>>>> data = np.array([('a ', 2.), ('b', 4.), ('d', 3.), ('c', 1.)],
>>>>
> ... dtype=[('col1', '|S5'), ('col2', '>f8')])
>
>>>> data
>>>>
> array([('a ', 2.0), ('b', 4.0), ('d', 3.0), ('c', 1.0)],
> dtype=[('col1', '|S5'), ('col2', '>f8')])
>
>>>> data.sort(order=['col1'])
>>>> data
>>>>
> array([('a ', 2.0), ('b', 4.0), ('c', 1.0), ('d', 3.0)],
> dtype=[('col1', '|S5'), ('col2', '>f8')])
>
>>>> data.sort(order=['col2'])
>>>> data
>>>>
> array([('a ', 2.0), ('d', 3.0), ('b', 4.0), ('c', 1.0)],
> dtype=[('col1', '|S5'), ('col2', '>f8')])
>
>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion@scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
More information about the NumPy-Discussion
mailing list