我提名
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's6倍以上。
我正在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您会以最快的速度平原。
玩
9999in生成
a表明
a.argmax时间取决于该值,与短路一致。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)