Python 在网格中查找模式
我试图用python构建一个程序,在矩阵中查找给定的模式,并计算该模式出现的次数Python 在网格中查找模式,python,matrix,Python,Matrix,我试图用python构建一个程序,在矩阵中查找给定的模式,并计算该模式出现的次数 pattern = [[1,0,1], [0,0,0], [1,0,1]] grid = [[0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0], [0,0,0,1,0,1,0,0,0],
pattern = [[1,0,1],
[0,0,0],
[1,0,1]]
grid = [[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,0,1,0,1,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,0,1,0,1,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0]]
我试过这个,但不起作用:
def find_pattern(grid,pattern):
for x in range(len(grid)):
for y in range (len(grid[0])):
x0 = (x//3)*3
y0 = (y//3)*3
for i in range(len(pattern)):
for j in range(len(pattern[0])):
if grid[x0 + i][y0 + j] != patter[i][j]:
return False
return True
这对我很有用:
def find_pattern(grid, pattern):
count = 0
for x in range(len(grid[0])-len(pattern[0])+1):
for y in range(len(grid)-len(pattern)+1):
local = grid[y:y+len(pattern)]
local = [e[x:x+len(pattern[0])] for e in local]
if local == pattern:
count += 1
return count
基本上,它循环遍历与模式
一样大的网格
的所有部分,然后为与模式
相同的每个部分添加一个到计数
例如:
pattern = [[0,1],
[1,0]]
grid = [[1,0,1,0,1],
[0,1,0,1,0]]
print(find_pattern(grid, pattern))
输出2
这对我很有用:
def find_pattern(grid, pattern):
count = 0
for x in range(len(grid[0])-len(pattern[0])+1):
for y in range(len(grid)-len(pattern)+1):
local = grid[y:y+len(pattern)]
local = [e[x:x+len(pattern[0])] for e in local]
if local == pattern:
count += 1
return count
基本上,它循环遍历与模式
一样大的网格
的所有部分,然后为与模式
相同的每个部分添加一个到计数
例如:
pattern = [[0,1],
[1,0]]
grid = [[1,0,1,0,1],
[0,1,0,1,0]]
print(find_pattern(grid, pattern))
输出
2
如果网格是一个矩阵NxM,模式是一个矩阵AxA,想法是在行上迭代(如您所做的),但直到N-a,然后迭代列直到M-a,并检查模式的每一行是否等于网格的一部分(pattern[0]==grid[i][j:j+3]
例如,如果网格是一个矩阵NxM j,模式是一个矩阵AxA,其思想是迭代行(正如您所做的那样),但直到N-A,然后迭代列直到M-A,并检查模式的每一行是否等于网格的一部分(例如,pattern[0]==grid[i][j:j+3]
)