如何在矩阵中找到邻居元素的总和

时间:2018-03-13 14:26:04

标签: python python-3.x python-2.7 list matrix

我试图找到矩阵中元素周围的邻居之和,并编写了一些函数来将布尔矩阵转换为1和0并找到邻居。但我不确定为什么会抛出以下错误

matrix=[[True,False,False],[False,True,False],[False,False,False]]
def minesweeper(matrix):
    matrix=[[1 if j==True else 0 for j in i] for i in matrix]
    bin_mt = matrix.copy()
    print(bin_mt)
    for i in range(len(matrix)):
        for j in range(len(matrix[0])):
            matrix[i][j]=get_neighbors(i,j,matrix, bin_mt)
            print('matrix: '+str(matrix))
            print('bin_mt: '+str(bin_mt))

    print(matrix)
    return matrix

def get_neighbors(a, b, matrix, bin_mt):
    sum=0
    if bin_mt[a][b]==1:
        return 1
    else:
        for i in find_neighbor_indices(matrix,a,b):
            print(bin_mt[i[0]][i[1]], end=' ')
            sum=sum+bin_mt[i[0]][i[1]]
        print('--')
        return sum

def find_neighbor_indices(matrix, i, j, dist=1):
    neighbors = []
    irange = range(max(0,i-dist), min(len(matrix), i+dist+1))
    if len(matrix) > 0:
        jrange = range(max(0, j - dist), min(len(matrix[ 0 ]), j + dist + 1))
    else:
        jrange = []
    for icheck in irange:
        for jcheck in jrange:
            if icheck != i or jcheck != j:
                neighbors.append((icheck, jcheck))
    return neighbors
minesweeper(matrix)

PS:我已经更新了代码。然而,我创建了一个包含1&0和0的矩阵,用于比较和邻居之和。但我不确定为什么它更新bin_mat和实际矩阵而不仅仅是实际矩阵。有人可以帮助我。

1 个答案:

答案 0 :(得分:0)

不用担心。我想到了。问题是二元矩阵是实际矩阵的浅层副本。无论我在实际矩阵中做出的改变是在二进制矩阵中进行更新。我需要深层复制而不是浅层复制。 使用下面的代码解决了它。

import copy
bin_mt = copy.deepcopy(matrix)

而不是

bin_mt = matrix.copy()