没有合适的资源?快使用搜索试试~ 我知道了~
首页Python实现二维矩阵滑动窗口求最大值并计算总和
Python实现二维矩阵滑动窗口求最大值并计算总和
6 下载量 177 浏览量
更新于2023-03-03
2
收藏 34KB PDF 举报
本资源是一份Python代码,用于解决一个面试中的笔试题,涉及到二维矩阵(n * m)的Max Pooling操作。题目要求计算每个滑动窗口(大小为a * b)内的最大值之和,其中矩阵元素是通过(i * j) % 10得到的。由于暴力求解时间复杂度过高,所以题目强调了使用滑动窗口算法进行优化。 首先,程序定义了一个名为`Solution`的类,包含以下几个主要方法: 1. `get_parameters()`: 该方法用于从控制台获取输入参数n、m、a和b,分别代表矩阵的行数、列数以及滑动窗口的大小。这些值被转换为整型并返回。 2. `create_matrix(n, m)`: 这个函数用于根据输入的行数n和列数m创建一个二维矩阵。矩阵的每个元素是通过(i + 1) * (j + 1)对10取余的结果,模拟题目中所述的特定值生成规则。 3. `getRowMaxWindow(matrix, row, col, w)`: 该方法实现了对矩阵的一行(row)使用滑动窗口,每次移动窗口大小为w。窗口内最大值添加到结果列表中,当窗口内的值小于w-1时,将窗口前一个位置的值替换掉。这个过程重复直到遍历完整行。 4. `getColMaxWindow(result_list, col, w)`: 在每一行使用滑动窗口后的矩阵`result_list`上,对每一列(col)再次应用滑动窗口操作。这一步确保了对整个二维矩阵进行了完整的窗口滑动处理。 最后,整个过程会递归地处理矩阵的每一行和每一列,直到完成所有的滑动窗口操作。整个算法的时间复杂度优于暴力求解,提高了效率。整个解决方案展示了如何利用滑动窗口技巧在二维数组中查找局部最大值,具有一定的算法理解和编程实践价值。
资源详情
资源推荐
笔试题笔试题——max pooling滑动窗口实现滑动窗口实现(python 代码代码)
题目题目
输入:从控制台获取n,m,a,b;其中n*m为矩阵大小,a*b为滑动窗口大小
矩阵中的值,通过(i*j)mod 10 得到,
在滑动过程中,需要获得每次滑动窗口中的最大值,并存储下来
输出:所有最大值的和
要求要求及思路及思路
纯暴力求解法,时间复杂度过高,需要使用滑动窗口方法求解
题目为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)
weixin_38743737
- 粉丝: 376
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 京瓷TASKalfa系列维修手册:安全与操作指南
- 小波变换在视频压缩中的应用
- Microsoft OfficeXP详解:WordXP、ExcelXP和PowerPointXP
- 雀巢在线媒介投放策划:门户网站与广告效果分析
- 用友NC-V56供应链功能升级详解(84页)
- 计算机病毒与防御策略探索
- 企业网NAT技术实践:2022年部署互联网出口策略
- 软件测试面试必备:概念、原则与常见问题解析
- 2022年Windows IIS服务器内外网配置详解与Serv-U FTP服务器安装
- 中国联通:企业级ICT转型与创新实践
- C#图形图像编程深入解析:GDI+与多媒体应用
- Xilinx AXI Interconnect v2.1用户指南
- DIY编程电缆全攻略:接口类型与自制指南
- 电脑维护与硬盘数据恢复指南
- 计算机网络技术专业剖析:人才培养与改革
- 量化多因子指数增强策略:微观视角的实证分析
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功