import math table = [] d = [(1, 0), (0, 1), (-1, 0), (0, -1)] def check(x, y, xLimit, yLimit): return x < 0 or y < 0 or x >= xLimit or y >= yLimit def f(radius, x, y, xLimit, yLimit): minm = 0 minp = (x, y) for dx, dy in d: if check(x + radius * dx, y + radius * dy, xLimit, yLimit): continue Srr, Szz, Srz = 0, 0, 0 rSum, zSum = 0, 0 curminv = 1e9 curminp = (x, y) for r in range(radius): rSum += r zSum += table[x + r * dx][y + r * dy] if table[x + r * dx][y + r * dy] < curminv: curminv = table[x + r * dx][y + r * dy] curminp = (x + r * dx, y + r * dy) rAvg = rSum / radius zAvg = zSum / radius for r in range(radius): Srr += (r - rAvg)**2 Szz += (table[x + r * dx][y + r * dy] - zAvg)**2 Srz += (r - rAvg) * (table[x + r * dx][y + r * dy] - zAvg) if not Szz: continue curm = Srz / (math.sqrt(Srr) * math.sqrt(Szz)) if curm < minm: minm = curm minp = curminp return minp[0], minp[1]