首页 > 解决方案 > 在python中检查矩阵中靠近元素的值

问题描述

考虑以下矩阵:

[[true,false,false,true], 
 [false,false,true,false], 
 [true,true,false,true]]

我希望 python 检查靠近每个元素的元素的值。例如,[0][0] 元素为真,而围绕它的三个元素为假,因此它应该返回类似 [0,0,0] 的东西。

     (element),false
     false,false

对于 [0][1] 元素,结果应为 [1,0,0,1,0]:

     true,(element),false
     false,false,true

依此类推(0和1的顺序并不重要,只是它们的数量)。我一直在尝试使用一些算法来做到这一点,但首先它需要很长时间,因为附近的元素每个项目都不同,使用 (for,while) 循环变得非常棘手,其次执行时间会变得很长。我的问题是,是否有任何库或方法(如 numpy)让我的工作更轻松?

标签: pythonpython-3.xmatrix

解决方案


像这样的东西可能会起作用:

mat = [[True, False, False, True],
       [False, False, True, False],
       [True, True, False, True]]

max_i = len(mat)
max_j = len(mat[0])

def surrounding(i, j):

    ret = []

    for ii in range(max(0, i-1), min(i+2, max_i)):
        for jj in range(max(0, j-1), min(j+2, max_j)):
            if (ii, jj) == (i, j):
                continue
            ret.append(int(mat[ii][jj]))
    return ret

注意 s 中的minandmax函数,range它们负责处理矩阵的边界。

并且因为 pythonboolint无论如何的子类,True并且False可以强制转换为int.


推荐阅读