[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