我需要找到矩阵的局部最大值。我使用函数check()
来检查当前元素是否是其邻居中最大的元素。这是我的代码,对于一些它可以工作的元素,但对于一些不这样做:
A = [[6,5,4,1],
[0,2,7,1],
[2,4,6,9]]
def check(row,column):
elem = A[row][column]
for i in range((row-1), (row+2)):
for j in range((column-1), (column+2)):
if (i>=0 and i < n) and (j>=0 and j < n) and (row != i and column != j):
if A[i][j] > elem:
return False
return True
答案 0 :(得分:0)
如果要检查的是当前元素是否为最大值,则可以像这样修改函数。我添加了一个样本矩阵A.
A=[[1,2,3],[1,4,3],[4,3,4]]
def check(row,column):
elem = A[row][column]
for i in range((row-1), (row+2)):
for j in range((column-1), (column+2)):
try:
if i > -1 and j > -1 and A[i][j] > A[row][column]:
return False
except IndexError:
pass
return True
#Is 2 at (0,1) max?
print check(0,1)
#Is 3 at (1,2) max?
print check(1,2)
#Is 4 at (1,1) max?
print check(1,1)
#Is 4 at (2,2) max?
print check(1,1)
输出:
False
False
True
True
通过捕获并忽略IndexError,您可以避免检查循环中是否超出界限(似乎这是您尝试使用n进行的检查,您尚未定义。)我也不考虑如果值相等,因为您只对当前是否为最大值感兴趣。如果你在当前元素时需要做一些不同的事情,你可以检查i,j分别等于行,列并放置自定义检查)
答案 1 :(得分:-1)
确保您不会尝试测试不属于您的二维数组的地方。如果你试图在这个庄园中测试东西,你不仅要加快这个过程,因为你要切断你需要检查的分支,但你也在加快弄清楚你正在检查的元素位置是否是不是最大的 如果您没有使用2-D阵列尝试这样做,可能会使过程更容易