如何遍历矩阵数组以计算围绕矩阵内特定元素的相似元素的数量

时间:2019-02-06 23:31:49

标签: python

matrix = [[true, false, false],
      [false, true, false],
      [false, false, false]]

[1] [2]和[2] [1]周围都有2个true。因此该元素位置的计数为2。其余位置为1,因为它们被1个元素包围。

result = [[0 for x in range(len(matrix[0]))] for y in range(len(matrix))]
for i in range(len(matrix)):
    for j in range(len(matrix[0])):
        for x in [1,0,-1]:
            for y in [1,0,-1]:
                if 0<=i+x<len(matrix) and 0<=j+y<len(matrix[0]):
                    result[i][j]= matrix[i+x][j+y]
return result

这是预期的输出

   output=  [[1, 2, 1],
[2, 1, 1],
[1, 1, 1]]

但是我得到的输出为

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

2 个答案:

答案 0 :(得分:3)

两个问题。第一次发生在您的for循环中。您不想计算当前索引,而只想对它的邻居进行抽样,因此您想排除x == y == 0的情况。为此,添加一个if x == y == 0: continue

这样的if语句

第二个问题是您要设置的值不递增。这里的内容:result[i][j]= matrix[i+x][j+y]仅将值设置为True,并且在检测到更多邻居时不会增加该值。而是添加如下内容:result[i][j] += matrix[i+x][j+y]

使用这两个修复程序,您可以获得正确的输出:

true = True
false = False

matrix = [[true, false, false],
      [false, true, false],
      [false, false, false]]


result = [[0 for x in range(len(matrix[0]))] for y in range(len(matrix))]
for i in range(len(matrix)):
    for j in range(len(matrix[0])):
        for x in [1,0,-1]:
            for y in [1,0,-1]:
                if x == y == 0: continue
                if 0<=i+x<len(matrix) and 0<=j+y<len(matrix[0]):
                    result[i][j] += matrix[i+x][j+y]
for i in result:
    print(i)

输出:

[1, 2, 1]
[2, 1, 1]
[1, 1, 1]

答案 1 :(得分:1)

您的代码应为

result[i][j] += matrix[i+x][j+y]

(请注意,用+=代替=