如何在Python中沿着矩阵的对角线找到位模式

时间:2013-11-07 13:33:04

标签: python design-patterns matrix

我有一个二进制元素大小为M的二维矩阵(n x n)。我想扫描此矩阵的对角线以过滤掉位模式,比如位模式111(位模式的长度是用户定义的)。

让我解释一下,让我的问题清楚。过滤标准是如果

  1. M(i, j) == 1和其相邻邻居M(i-1, j-1)M(i+1, j+1)的两个(在本例中)也是1,然后保留M(i,j) {{ 1}}否则会更改为位1

  2. 或者,0并且它在同一对角线中至少有两个前M(i,j) ==1个或两个1之后,即使条件优先不是真仍然{{} 1}}应该保留1

  3. 我是python的新手并且正在努力解决这个问题,所以任何有关解决这个问题的帮助/建议都会受到欢迎......

2 个答案:

答案 0 :(得分:0)

我会帮助你开始,然后你可以尝试,让我们看看你在哪里。

matrix = [[0, 1, 0], [1, 1, 1], [0, 1, 1]]

for i in range(len(matrix)):
    for j in range(len(matrix[i])):
        print(matrix[i][j])

现在您已经解析了矩阵,尝试找出比较,然后替换应该很容易。

答案 1 :(得分:0)

如果您在视觉上看,尝试打印结果可能会有所帮助

matrix = [[0, 1, 0, 1], [1, 1, 1, 1], [0, 1, 1, 0], [1, 0, 1, 0]]

for i in range(len(matrix)):
    line = ''
    for j in range(len(matrix[i])):
        line += str(matrix[i][j]) + " "
    print(line)

diagonal = ''
for i in range(len(matrix)):
    for j in range(len(matrix[i])):
        if i == j:
            diagonal += str(matrix[i][j]) + ' '

print('Diagonal: ' + diagonal)

输出:

0 1 0 1 
1 1 1 1 
0 1 1 0 
1 0 1 0 
Diagonal: 0 1 1 0 

现在尝试一些实验,看看你是否可以获得平行对角线。