栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

熊猫:计算第一个连续的True值

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

熊猫:计算第一个连续的True值

题:

查找第一个连续

True
s的计数
考虑
a

a = np.array([True, True, True, False, True, False, True, True, True, True])

答案1

numpy
:用于
np.logical_and.accumulate
的取反,
a
取之于
False
否,则制成一个遮罩,以消除第一个s的存在(如果它们应该存在)。然后
False
在末尾附加a
,以确保我们没有
True
min。最后,使用
np.argmin
查找第一个最小值。如果找到一个position
3
,它将
3

True
在其之前指示值。

np.argmin(np.append(a[~np.logical_and.accumulate(~a)], False))3

答案2

numba.njit

我想使用它,

numba
这样我就可以循环并确保在需要时可以短路。这个问题肯定会在阵列的早期得到解决。无需无故评估整个阵列中的事物。

from numba import njit@njitdef first_true(a):    true_started = False    c = 0    for i, j in enumerate(a):        if true_started and not j: return c        else: c += j true_started = true_started or j    return cfirst_true(a)3

答案3

numpy
更聪明的使用
argmin
argmax
。我围绕
a
False
然后
argmax
用来找到第一个,
True
然后从那一点开始,
argmin
用来找到之后的第一个
False

注意:
@Divakar在此答案上做了改进,消除了对
np.concatenate
和的使用
if/then/else
。这就把这个已经非常快的解决方案削减了
3

def first_true2(a):    a = np.concatenate([[False], a, [False]])    return np.argmin(a[np.argmax(a):])first_true2(a)3

这些答案有多快?
有关其他定时功能的源代码,请参见@Divakar的答案。

%timeit first_true(a)%timeit np.argmin(np.append(a[~np.logical_and.accumulate(~a)], False))%timeit np.diff(np.flatnonzero(np.diff(np.r_[0,a,0])))[0]%timeit first_True_island_len(a)%timeit first_true2(a)%timeit first_True_island_len_IFELSE(a)a = np.array([True, True, True, False, True, False, True, True, True, True])    1000000 loops, best of 3: 353 ns per loop100000 loops, best of 3: 8.32 µs per loop10000 loops, best of 3: 27.4 µs per loop100000 loops, best of 3: 5.48 µs per loop100000 loops, best of 3: 5.38 µs per loop1000000 loops, best of 3: 1.35 µs per loopa = np.array([False] * 100000 + [True] * 10000)10000 loops, best of 3: 112 µs per loop10000 loops, best of 3: 127 µs per loop1000 loops, best of 3: 513 µs per loop10000 loops, best of 3: 110 µs per loop100000 loops, best of 3: 13.9 µs per loop100000 loops, best of 3: 4.55 µs per loopa = np.array([False] * 100000 + [True])10000 loops, best of 3: 102 µs per loop10000 loops, best of 3: 115 µs per loop1000 loops, best of 3: 472 µs per loop10000 loops, best of 3: 108 µs per loop100000 loops, best of 3: 14 µs per loop100000 loops, best of 3: 4.45 µs per loop


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/662679.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号