考虑数组a
a = np.array([3, 3, np.nan, 3, 3, np.nan])
我可以的
^{pr2}$但这需要找到所有np.nan
,只为找到第一个。
有没有更有效的方法?在
我一直在试图弄清楚是否可以将一个参数传递给np.argpartition
,这样np.nan
get的排序是第一个,而不是最后一个。在
编辑有关[dup]的内容。
这个问题不同有几个原因。在
isnan
。在编辑有关第二个[dup]的内容。在
仍然强调平等和问题/答案是过时的,而且很可能已经过时。在
我会提名的
使用
^{pr2}$@fuglede's
测试数组:我没有安装
numba
,所以可以比较一下。但是我相对于short
的加速比大于@fuglede's
6x我在Py3中测试,它接受
<np.nan
,而Py2会发出运行时警告。但是代码搜索表明这并不依赖于这种比较。在{{{cd6}的操作取决于{cd6}的末尾。在
在
numpy/core/src/multiarray/arraytypes.c.src
中,它看起来像是BOOL_argmax
短路,一旦遇到True
就会立即返回。在并且
@fname@_argmax
也在最大nan
上短路。np.nan
也是argmin
中的“最大值”。在欢迎来自经验丰富的
c
程序员的评论,但在我看来,至少对于np.nan
,一个简单的argmax
将与我们所能得到的一样快。在在生成
a
时使用9999
表明a.argmax
时间依赖于该值,与短路一致。在下面是一个使用
itertools.takewhile()
的python方法:在{}方法中使用生成器表达式进行基准测试:1
^{pr2}$但仍然(到目前为止)慢于numpy方法:
1这种方法的问题是使用
enumerate
函数。它首先从numpy数组返回一个enumerate
对象(它是一个类似迭代器的对象),调用生成器函数和迭代器的next
属性需要时间。研究
numba.jit
;如果没有它,矢量化版本在大多数情况下可能会击败直接的纯Python搜索,但是在编译代码之后,普通搜索将占据主导地位,至少在我的测试中是这样:编辑:正如@hpaulj在他们的回答中指出的,
^{pr2}$numpy
实际上提供了一个优化的短路搜索,其性能与上面的JITted搜索相当:相关问题 更多 >
编程相关推荐