[SciPy-User] sorting an array

josef.pktd at gmail.com josef.pktd at gmail.com
Sat Aug 1 08:00:45 EDT 2009


On Sat, Aug 1, 2009 at 7:47 AM, Emmanuelle
Gouillart<emmanuelle.gouillart at normalesup.org> wrote:
>        Hi Martin,
>
>        I'm not sure if I understand what you mean, but does the
> following solve your problem?
>
>>>> a = np.array([(1,0,2,5),(1,5,6,2),(1,2,8,7),(1,4,4,6),(1,3,2,3),(1,11,2,0),(1,10,1,3),(1,9,0,4),(1,8,9,6)])
>>>> a
> array([[ 1,  0,  2,  5],
>       [ 1,  5,  6,  2],
>       [ 1,  2,  8,  7],
>       [ 1,  4,  4,  6],
>       [ 1,  3,  2,  3],
>       [ 1, 11,  2,  0],
>       [ 1, 10,  1,  3],
>       [ 1,  9,  0,  4],
>       [ 1,  8,  9,  6]])
>>>> a[:,:2] = np.sort(a[:,:2], axis=0)
>>>> a
> array([[ 1,  0,  2,  5],
>       [ 1,  2,  6,  2],
>       [ 1,  3,  8,  7],
>       [ 1,  4,  4,  6],
>       [ 1,  5,  2,  3],
>       [ 1,  8,  2,  0],
>       [ 1,  9,  1,  3],
>       [ 1, 10,  0,  4],
>       [ 1, 11,  9,  6]])
>
>        Cheers,
>
>        Emmanuelle
>
> On Sat, Aug 01, 2009 at 03:23:47AM -0700, Martin wrote:
>> Hi,
>
>> I would ideally like to sort an multidimensional array by  the first
>> column, but I can only manage to adjust the whole array. For
>> example...
>
>> >a = array([(1,0,2,5),(1,5,6,2),(1,2,8,7),(1,4,4,6),(1,3,2,3),(1,11,2,0),(1,10,1,3),(1,9,0,4),(1,8,9,6)])
>> >a
>> array([[ 1,  0,  2,  5],
>>        [ 1,  5,  6,  2],
>>        [ 1,  2,  8,  7],
>>        [ 1,  4,  4,  6],
>>        [ 1,  3,  2,  3],
>>        [ 1, 11,  2,  0],
>>        [ 1, 10,  1,  3],
>>        [ 1,  9,  0,  4],
>>        [ 1,  8,  9,  6]])
>> >sort(a, axis = 0)
>> array([[ 1,  0,  0,  0],
>>        [ 1,  2,  1,  2],
>>        [ 1,  3,  2,  3],
>>        [ 1,  4,  2,  3],
>>        [ 1,  5,  2,  4],
>>        [ 1,  8,  4,  5],
>>        [ 1,  9,  6,  6],
>>        [ 1, 10,  8,  6],
>>        [ 1, 11,  9,  7]])
>
>> When really what i wanted was not for the 3rd and 4th columns to also
>> be sorted nunmerically in that way. In unix I would reformat the first
>> two columns in gawk i.e. gawk '{printf("%2.3d %2.3d, %d, %d\n", $1,
>> $2, $3, $4)}' | sort -n -k 1
>
>> Any help would be appreciated!
>
>> Thanks
>
>> Martin
>> _______________________________________________
>> SciPy-User mailing list
>> SciPy-User at scipy.org
>> http://mail.scipy.org/mailman/listinfo/scipy-user
> _______________________________________________
> SciPy-User mailing list
> SciPy-User at scipy.org
> http://mail.scipy.org/mailman/listinfo/scipy-user
>

or maybe: sorting rows by the last column (since it is not sorted already)

>>> a = np.array([(1,0,2,5),(1,5,6,2),(1,2,8,7),(1,4,4,6),(1,3,2,3),(1,11,2,0),(1,10,1,3),(1,9,0,4),(1,8,9,6)])
>>> ind = np.argsort(a[:,-1])
>>> a[ind,:]
array([[ 1, 11,  2,  0],
       [ 1,  5,  6,  2],
       [ 1,  3,  2,  3],
       [ 1, 10,  1,  3],
       [ 1,  9,  0,  4],
       [ 1,  0,  2,  5],
       [ 1,  4,  4,  6],
       [ 1,  8,  9,  6],
       [ 1,  2,  8,  7]])

Josef



More information about the SciPy-User mailing list