笔试题——max pooling滑动窗口实现(python 代码)

Faye ·
更新时间:2024-09-20
· 651 次阅读

题目 输入:从控制台获取n,m,a,b;其中n*m为矩阵大小,a*b为滑动窗口大小 矩阵中的值,通过(i*j)mod 10 得到,1\leq i\leq N,1\leq j\leq M 在滑动过程中,需要获得每次滑动窗口中的最大值,并存储下来 输出:所有最大值的和 要求及思路 纯暴力求解法,时间复杂度过高,需要使用滑动窗口方法求解 题目为2维矩阵,所以需要对行和列依次使用滑动窗口方法即可 不了解滑动窗口的可以参考一维滑动窗口这篇文章 源码 from pip._vendor.distlib.compat import raw_input class Solution: #获得输入参数 def get_parameters(self): # get the input from console input_array = raw_input().split(" ") n = input_array[0] m = input_array[1] a = input_array[2] b = input_array[3] print(n, m, a, b) return int(n),int(m),int(a),int(b) #构建矩阵 def create_matrix(self,n,m): # create the matrix matrix = [] for i in range(int(n)): inner_list = [] for j in range(int(m)): ele = (i + 1) * (j + 1) % 10 inner_list.append(ele) matrix.append(inner_list) # print(matrix) return matrix #对每行使用滑动窗口获得新的矩阵 def getRowMaxWindow(self,matrix,row,col,w): queue=[] result_list=[] for i in range(row): inner_list=[] for j in range(col): while queue and matrix[i][queue[-1]]=w-1: inner_list.append(matrix[i][queue[0]]) result_list.append(inner_list) return result_list #在每行使用滑动窗口后获得的矩阵基础上,对每列使用滑动窗口 def getColMaxWindow(self,matrix,row,col,w): queue=[] result_list=[] for j in range(col): inner_list=[] for i in range(row): while queue and matrix[queue[-1]][j]=w-1: inner_list.append(matrix[queue[0]][j]) result_list.append(inner_list) return result_list #对矩阵求和 def getSum(self,matrix,row,col): sum=0 for i in range(row): for j in range(col): sum+=matrix[i][j] return sum if __name__=="__main__": so=Solution() n,m,a,b=so.get_parameters() matrix=so.create_matrix(n,m) print(matrix) res_matrix=so.getRowMaxWindow(matrix,n,m,b) print(res_matrix) res_matrix2=so.getColMaxWindow(res_matrix,n,m-b+1,a) print(res_matrix2) #行列反了,因为getCol返回的matrix是行列反的 sum=so.getSum(res_matrix2,m-b+1,n-a+1) print(sum)
作者:flying_1314



max Python

需要 登录 后方可回复, 如果你还没有账号请 注册新账号