我有一个二进制元素大小为M
的二维矩阵(n x n
)。我想扫描此矩阵的对角线以过滤掉位模式,比如位模式111
(位模式的长度是用户定义的)。
让我解释一下,让我的问题清楚。过滤标准是如果
M(i, j) == 1
和其相邻邻居M(i-1, j-1)
和M(i+1, j+1)
的两个(在本例中)也是1
,然后保留M(i,j)
{{ 1}}否则会更改为位1
。
或者,0
并且它在同一对角线中至少有两个前M(i,j) ==1
个或两个1
之后,即使条件优先不是真仍然{{} 1}}应该保留1
。
我是python的新手并且正在努力解决这个问题,所以任何有关解决这个问题的帮助/建议都会受到欢迎......
答案 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
现在尝试一些实验,看看你是否可以获得平行对角线。