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

问题描述 投票:6回答:2
matrix = [[true, false, false],
      [false, true, false],
      [false, false, false]]

[1] [2]和[2] [1]都有2个真实的围绕它们。所以该元素位置的计数为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
2个回答
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
投票

你的代码应该是

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

(注意+=而不是=

© www.soinside.com 2019 - 2024. All rights reserved.