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

查找第一个np.nan值的位置的最有效方法是什么?

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

查找第一个np.nan值的位置的最有效方法是什么?

我提名

a.argmax()

带有

@fuglede's
测试数组:

In [1]: a = np.array([np.nan if i % 10000 == 9999 else 3 for i in range(100000)])In [2]: np.isnan(a).argmax()Out[2]: 9999In [3]: np.argmax(a)Out[3]: 9999In [4]: a.argmax()Out[4]: 9999In [5]: timeit a.argmax()The slowest run took 29.94 ....10000 loops, best of 3: 20.3 µs per loopIn [6]: timeit np.isnan(a).argmax()The slowest run took 7.82 ...1000 loops, best of 3: 462 µs per loop

我尚未

numba
安装,因此可以进行比较。但是我的相对加速比
short
@fuglede's
6倍以上。

我正在Py3中接受测试

<np.nan
,而Py2则发出运行时警告。但是代码搜索表明这不依赖于该比较。

/numpy/core/src/multiarray/calculation.c

PyArray_ArgMax
与轴一起玩(将感兴趣的一个移动到最后),并将动作委派给
arg_func =PyArray_DESCR(ap)->f->argmax
,该函数取决于dtype。

numpy/core/src/multiarray/arraytypes.c.src
它看起来像
BOOL_argmax
短路,一旦遇到一回
True

for (; i < n; i++) {    if (ip[i]) {        *max_ind = i;        return 0;    }}

并且

@fname@_argmax
最大短路
nan
np.nan
也是“最大”
argmin

#if @isfloat@    if (@isnan@(mp)) {                return 0;    }#endif

c
欢迎经验丰富的编码人员发表评论,但在我看来,至少对于
np.nan
argmax
您会以最快的速度平原。

9999
in生成
a
表明
a.argmax
时间取决于该值,与短路一致。



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

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

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