查找矩阵元素的相邻元素

时间:2014-11-18 17:39:35

标签: python math matrix

我需要找到矩阵的局部最大值。我使用函数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

2 个答案:

答案 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阵列尝试这样做,可能会使过程更容易

相关问题