def torben()

in pdq/python/pdqhashing/utils/matrix.py [0:0]


    def torben(cls, m, numRows, numCols):
        n = numRows * numCols
        midn = int((n + 1) / 2)
        less = int()
        greater = int()
        equal = int()
        min = float()
        max = float()
        guess = float()
        maxltguess = float()
        mingtguess = float()
        min = max = m[0][0]
        for i in range(numRows):
            for j in range(numCols):
                v = m[i][j]
                if v < min:
                    min = v
                if v > max:
                    max = v

        while True:
            guess = float((min + max) / 2)
            less = 0
            greater = 0
            equal = 0
            maxltguess = min
            mingtguess = max

            for _i in range(numRows):
                for _j in range(numCols):
                    v = m[_i][_j]
                    if v < guess:
                        less += 1
                        if v > maxltguess:
                            maxltguess = v
                    elif v > guess:
                        greater += 1
                        if v < mingtguess:
                            mingtguess = v
                    else:
                        equal += 1
            if less <= midn and greater <= midn:
                break
            elif less > greater:
                max = maxltguess
            else:
                min = mingtguess
        if less >= midn:
            return maxltguess
        elif less + equal >= midn:
            return guess
        else:
            return mingtguess