python-NumPy-捕获前三个连续负数的索引
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-NumPy-捕获前三个连续负数的索引,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1289字,纯文字阅读大概需要2分钟。
内容图文
![python-NumPy-捕获前三个连续负数的索引](/upload/InfoBanner/zyjiaocheng/669/287d9e30393643719410e8ce7d7ed41f.jpg)
我需要找到三个连续负数首次出现的索引.以普通的Python方式,我会这样做:
a = [1,-1,1,-1,1,-1,1,-1,-1,-1,1,-1,1]
b=0
for i,v in enumerate(a):
if v<0:
b+=1
else:
b=0
if b==3:
break
indx = i-2
任何人都知道如何以更智能的NumPy方式进行操作?
解决方法:
这是在卷积帮助下的矢量化解决方案-
def first_consecutive_negative_island(a, N=3):
mask = np.convolve(np.less(a,0),np.ones(N,dtype=int))>=N
if mask.any():
return mask.argmax() - N + 1
else:
return None
样品运行-
In [168]: a = [1,-1,1,-1,1,-1,1,-1,-1,-1,1,-1,1]
In [169]: first_consecutive_negative_island(a, N=3)
Out[169]: 7
无论该小组在哪里存在,都可以工作-
In [175]: a
Out[175]: [-1, -1, -1, 1, -1, 1, -1, -1, -1, 1, -1, 1]
In [176]: first_consecutive_negative_island(a, N=3)
Out[176]: 0
如果没有负数,则正常返回None-
In [183]: a
Out[183]: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
In [184]: first_consecutive_negative_island(a, N=3)
对于三个连续的负数搜索,我们可以使用切片,如下所示:
def first_consecutive_negative_island_v2(a):
m = np.less(a,0)
mask = m[:-2] & m[1:-1] & m[2:]
if mask.any():
return mask.argmax()
else:
return None
时间-
In [270]: a = np.random.randint(-1,2,(1000000)).tolist()
In [271]: %timeit first_consecutive_negative_island(a, N=3)
10 loops, best of 3: 44.5 ms per loop
In [272]: %timeit first_consecutive_negative_island_v2(a)
10 loops, best of 3: 38.7 ms per loop
内容总结
以上是互联网集市为您收集整理的python-NumPy-捕获前三个连续负数的索引全部内容,希望文章能够帮你解决python-NumPy-捕获前三个连续负数的索引所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。