python:二维矩阵中更快的局部最大值
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python:二维矩阵中更快的局部最大值,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1155字,纯文字阅读大概需要2分钟。
内容图文
![python:二维矩阵中更快的局部最大值](/upload/InfoBanner/zyjiaocheng/759/a04befd91e1b4c348694214f20c5d480.jpg)
给定:R是mxn浮点矩阵
输出:O是m×n矩阵,其中O [i,j] = R [i,j] if(i,j)是局部最大值,否则O [i,j] = 0.局部最大值定义为以i,j为中心的3×3块中的最大元素.
使用numpy和scipy在python上执行此操作的更快的方法是什么.
m,n = R.shape
for i in range(m):
for j in range(n):
R[i,j] *= (1 if R[min(0,i-1):max(m, i+2), min(0,j-1):max(n,j+2)].max() == R[i,j] else 0)
解决方法:
你可以使用scipy.ndimage.maximum_filter:
In [28]: from scipy.ndimage import maximum_filter
这是一个样本R:
In [29]: R
Out[29]:
array([[3, 3, 0, 0, 3],
[0, 0, 2, 1, 3],
[0, 1, 1, 1, 2],
[3, 2, 1, 2, 0],
[2, 2, 1, 2, 1]])
在3×3窗口上获得最大值:
In [30]: mx = maximum_filter(R, size=3)
In [31]: mx
Out[31]:
array([[3, 3, 3, 3, 3],
[3, 3, 3, 3, 3],
[3, 3, 2, 3, 3],
[3, 3, 2, 2, 2],
[3, 3, 2, 2, 2]])
将mx与R进行比较;这是一个布尔矩阵:
In [32]: mx == R
Out[32]:
array([[ True, True, False, False, True],
[False, False, False, False, True],
[False, False, False, False, False],
[ True, False, False, True, False],
[False, False, False, True, False]], dtype=bool)
使用np.where创建O:
In [33]: O = np.where(mx == R, R, 0)
In [34]: O
Out[34]:
array([[3, 3, 0, 0, 3],
[0, 0, 0, 0, 3],
[0, 0, 0, 0, 0],
[3, 0, 0, 2, 0],
[0, 0, 0, 2, 0]])
内容总结
以上是互联网集市为您收集整理的python:二维矩阵中更快的局部最大值全部内容,希望文章能够帮你解决python:二维矩阵中更快的局部最大值所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。
来源:【匿名】