在python

时间:2018-10-01 09:32:16

标签: python python-3.x matrix

考虑以下矩阵:

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

我想让python检查每个元素附近的元素值。例如[0] [0]元素为true,而周围的三个元素为false,因此它应该返回[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)使我的工作更轻松?

1 个答案:

答案 0 :(得分:2)

类似的事情可能起作用:

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

请注意min内部的maxrange函数,这些函数会处理矩阵的边界。

并且由于python boolint的子类,因此TrueFalse可以强制转换为int