Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在网格中查找模式_Python_Matrix - Fatal编程技术网

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

我试图用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],
            [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]