On 6/26/07, Charles R Harris <[EMAIL PROTECTED]> wrote:
On 6/26/07, Tom Denniston <[EMAIL PROTECTED]> wrote: > > In [1]: intArr1 = numpy.array([ 0, 1, 2,-2,-1, 5,-5,-5]) > In [2]: intArr2 = numpy.array([1,1,1,2,2,2,3,4]) > In [3]: charArr = numpy.array(['a','a','a','b','b','b','c','d']) > > Here I sort two int arrays. As expected intArr2 dominates intArr1 but > the items with the same intArr2 values are sorted forwards according > to intArr1 > In [6]: numpy.lexsort((intArr1, intArr2)) > Out[6]: array([0, 1, 2, 3, 4, 5, 6, 7]) > > This, however, looks like a bug to me. Here I sort an int array and > a str array. As expected charArray dominates intArr1 but the items > with the same charArray values are sorted *backwards* according to > intArr1 > In [5]: numpy.lexsort((intArr1, charArr)) > Out[5]: array([2, 1, 0, 5, 4, 3, 6, 7]) > > Is this a bug or am I missing something? Looks like a bug. In [12]: numpy.argsort([charArr], kind='m') Out[12]: array([[2, 1, 0, 5, 4, 3, 6, 7]]) In [13]: numpy.argsort([intArr2], kind='m') Out[13]: array([[0, 1, 2, 3, 4, 5, 6, 7]]) Both of these are stable sorts, and since the elements are in order should return [[0, 1, 2, 3, 4, 5, 6, 7]]. Actually, I think they should return [0, 1, 2, 3, 4, 5, 6, 7], I'm not sure why the returned array is 2D and I suspect that is a bug also. As to why the string array sorts incorrectly, I am not sure. It could be that the sort isn't stable, there could be a stride error, or the comparison is returning wrong values. My bet is on the first being the case.
Nevermind the 2D thingee, that was pilot error in changing lexsort to argsort, charArr should not be in a list: In [25]: numpy.argsort(charArr, kind='m', axis=0) Out[25]: array([2, 1, 0, 5, 4, 3, 6, 7]) Works just fine. Chuck
_______________________________________________ Numpy-discussion mailing list Numpy-discussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpy-discussion