在2d数组中查找最高矩形的平均值

时间:2016-05-03 21:10:34

标签: arrays python-3.x optimization

我需要找出给定2d数组中哪个矩形的平均值最高。显然答案是1x1矩形,只包含最高值的单元格。但是,只有两边等于或超过给定值的矩形才有效,应予以考虑。

问题在技术上很容易解决:

def highest_average(array, minsize):
    highest = -1, -1, -1, -1, -float("inf")
    width, height = len(array[0]), len(array)
    for rowstart in range(height-minsize):
        for colstart in range(width-minsize):
            for rowend in range(rowstart+minsize, height):
                for colend in range(colstart+minsize, width):
                    val = sum(
                        sum(array[row][col] for row in range(rowstart, rowend+1)) for col in range(colstart, colend+1)
                    )/((rowend-rowstart)*(colend-colstart))
                    if val > highest[4]:
                        highest = rowstart, colstart, rowend, colend, val
    return highest

# Random-valued 16x16 array
array = [[random.randint(0, 100) for _ in range(16)] for _ in range(16)]
for row in array:
    print(" ".join("{:3d}".format(f) for f in row))

# Calculated average with min rectangle size 4x4
print(highest_average(array, 4))

但这只适用于小型数组。使用大数组(100x100或更多)运行此函数,以及一个minsize,例如10,将需要数小时才能返回。

我可以用任何方法来减少运行时间吗?显然我不是在寻找减少0.1%时间的技巧,我需要大幅提高执行速度。

0 个答案:

没有答案