pdq/python/pdqhashing/utils/matrix.py (62 lines of code) (raw):
#!/usr/bin/env python
# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved
class MatrixUtil:
@classmethod
def allocateMatrix(cls, numRows, numCols):
rv = [0.0] * numRows
for i in range(numRows):
rv[i] = [0.0] * numCols
return rv
@classmethod
def allocateMatrixAsRowMajorArray(cls, numRows, numCols):
return [0.0] * numRows * numCols
@classmethod
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