def test_keysort(self): N = 1000 rnd = numpy.random.randint(N, size=N) for dtype1 in ('S6', 'b1', 'i1', 'i8', 'u4', 'u8', 'f4', 'f8'): for dtype2 in ('u4', 'i8'): a = numpy.array(rnd, dtype1) b = numpy.array(rnd, dtype2) c = a.copy() d = c.argsort() e = c[d] f = b[d] indexesextension.keysort(a, b) self.assertTrue((a == e).all()) self.assertTrue((b == f).all())
import numpy from time import perf_counter as clock N = 1000 * 1000 rnd = numpy.random.randint(N, size=N) for dtype1 in ('S6', 'b1', 'i1', 'i2', 'i4', 'i8', 'u1', 'u2', 'u4', 'u8', 'f4', 'f8'): for dtype2 in ('u4', 'i8'): print("dtype array1, array2-->", dtype1, dtype2) a = numpy.array(rnd, dtype1) b = numpy.arange(N, dtype=dtype2) c = a.copy() t1 = clock() d = c.argsort() # c.sort() # e=c e = c[d] f = b[d] tref = clock() - t1 print("normal sort time-->", tref) t1 = clock() keysort(a, b) tks = clock() - t1 print("keysort time-->", tks, " {:.2f}x".format(tref / tks)) assert numpy.alltrue(a == e) #assert numpy.alltrue(b == d) assert numpy.alltrue(f == d)
from time import time N = 1000 * 1000 rnd = numpy.random.randint(N, size=N) for dtype1 in ('S6', 'b1', 'i1', 'i2', 'i4', 'i8', 'u1', 'u2', 'u4', 'u8', 'f4', 'f8'): for dtype2 in ('u4', 'i8'): print("dtype array1, array2-->", dtype1, dtype2) a = numpy.array(rnd, dtype1) b = numpy.arange(N, dtype=dtype2) c = a.copy() t1 = time() d = c.argsort() # c.sort() # e=c e = c[d] f = b[d] tref = time() - t1 print("normal sort time-->", tref) t1 = time() keysort(a, b) tks = time() - t1 print("keysort time-->", tks, " %.2fx" % (tref / tks,)) assert numpy.alltrue(a == e) #assert numpy.alltrue(b == d) assert numpy.alltrue(f == d)