from numpy import *
x = rand(100000)*100
x = x.astype('i')
l = list(x)

def unique_sasha(x):
     s = sort(x)
     r = empty(s.shape, float)
     r[:-1] = s[1:]
     r[-1] = NaN # Ensures that the last element is always kept, so that unique([1,1,1]) returns [1]. 
     return s[r != s] 
     
def unique_norbert(arr,sort=True):
    if hasattr(arr,'flatten'):
        tmp = arr.flatten()
        tmp.sort()
        idx = concatenate(([True],tmp[1:]!=tmp[:-1]))
        return tmp[idx]
    else: # for compatibility:
        set = {}
        for item in arr:
            set[item] = None
    if sort:
        return asarray(sorted(set.keys()))
    else:
        return asarray(set.keys())


def unique_alan(arr,sort=True):
    if hasattr(arr,'flatten'):
       tmp = arr.flatten()
       tmp.sort()
       idx = concatenate(([True],tmp[1:]!=tmp[:-1]))
       return tmp[idx]
    else: #for compatability
        items = list(set(arr))
        if sort: items.sort()
        return asarray(items)

