首页 > 解决方案 > 如何遍历矩阵数组以计算矩阵内特定元素周围的相似元素的数量

问题描述

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]]

标签: python

解决方案


两个问题。第一个发生在你的 for 循环中。您不想计算当前索引,只想对其邻居进行采样,因此您想丢弃x == y == 0. 通过添加一个 if 语句来做到这一点if x == y == 0: continue

第二个问题是您设置的值不增加它。这在这里: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]

推荐阅读