python – 用于确定numpy数组的2个(垂直或水平)相邻元素是否具有相同值的最快方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 用于确定numpy数组的2个(垂直或水平)相邻元素是否具有相同值的最快方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1518字,纯文字阅读大概需要3分钟。
内容图文
![python – 用于确定numpy数组的2个(垂直或水平)相邻元素是否具有相同值的最快方法](/upload/InfoBanner/zyjiaocheng/728/82f2b2ad550b4cfcab3bffc8e4b8a9ab.jpg)
我正在寻找确定2(垂直或水平)相邻元素是否具有相同值的最快方法.
假设我有一个大小为4×4的numpy数组.
array([
[8, 7, 4, 3],
[8, 4, 0, 4],
[3, 2, 2, 1],
[9, 8, 7, 6]])
我希望能够识别出第一列中有两个相邻的8,并且第三行中有两个相邻的2.我可以硬编码支票,但那会很难看,我想知道是否有更快的方法.
所有指导表示赞赏.谢谢.
解决方法:
我们将在行和列中寻找区分值,以便在那里用零来表示重复的值.因此,我们可以做 –
(np.diff(a,axis=0) == 0).any() | (np.diff(a,axis=1) == 0).any()
或者通过切片提升性能 –
(a[1:] == a[:-1]).any() | (a[:,1:] == a[:,:-1]).any()
所以,(a [1:] == a [: – 1]).any()是垂直邻接,而另一个是水平邻接.
沿行或列扩展到n个相邻的(具有相同值) –
from scipy.ndimage.filters import convolve1d as conv
def vert_horz_adj(a, n=1):
k = np.ones(n,dtype=int)
v = (conv((a[1:]==a[:-1]).astype(int),k,axis=0,mode='constant')>=n).any()
h = (conv((a[:,1:]==a[:,:-1]).astype(int),k,axis=1,mode='constant')>=n).any()
return v | h
样品运行 –
In [413]: np.random.seed(0)
...: a = np.random.randint(11,99,(10,4))
...: a[[2,3,4,6,7,8],0] = 1
In [414]: a
Out[414]:
array([[55, 58, 75, 78],
[78, 20, 94, 32],
[ 1, 98, 81, 23],
[ 1, 76, 50, 98],
[ 1, 92, 48, 36],
[88, 83, 20, 31],
[ 1, 80, 90, 58],
[ 1, 93, 60, 40],
[ 1, 30, 25, 50],
[43, 76, 20, 68]])
In [415]: vert_horz_adj(a, n=1)
Out[415]: True # Because of first col
In [416]: vert_horz_adj(a, n=2)
Out[416]: True # Because of first col
In [417]: vert_horz_adj(a, n=3)
Out[417]: False
In [418]: a[-1] = 10
In [419]: vert_horz_adj(a, n=3)
Out[419]: True # Because of last row
内容总结
以上是互联网集市为您收集整理的python – 用于确定numpy数组的2个(垂直或水平)相邻元素是否具有相同值的最快方法全部内容,希望文章能够帮你解决python – 用于确定numpy数组的2个(垂直或水平)相邻元素是否具有相同值的最快方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。