繁体   English   中英

查找矩阵元素的相邻元素

[英]Find neighboring elements of matrix element

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

如果要检查的是当前元素是否为最大值,则可以像这样修改函数。 我添加了一个样本矩阵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分别等于行,列,然后进行自定义检查)

确保您没有尝试测试不属于二维数组的地方。 如果您尝试测试此庄园中的事物,不仅因为您正在切断需要检查的分支而加快了流程的速度,而且还加快了确定当前正在检查的元素位置是否在的过程。如果您没有使用二维数组,则不是最大值,这样做可能会使过程更容易

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM