擅长:python、mysql、java
<p>我会提名的</p>
<pre><code>a.argmax()
</code></pre>
<p>使用<code>@fuglede's</code>测试数组:</p>
^{pr2}$
<p>我没有安装<code>numba</code>,所以可以比较一下。但是我相对于<code>short</code>的加速比大于<code>@fuglede's</code>6x</p>
<p>我在Py3中测试,它接受<code><np.nan</code>,而Py2会发出运行时警告。但是代码搜索表明这并不依赖于这种比较。在</p>
<p>{{{cd6}的操作取决于{cd6}的末尾。在</p>
<p>在<code>numpy/core/src/multiarray/arraytypes.c.src</code>中,它看起来像是<code>BOOL_argmax</code>短路,一旦遇到<code>True</code>就会立即返回。在</p>
<pre><code>for (; i < n; i++) {
if (ip[i]) {
*max_ind = i;
return 0;
}
}
</code></pre>
<p>并且<code>@fname@_argmax</code>也在最大<code>nan</code>上短路。<code>np.nan</code>也是<code>argmin</code>中的“最大值”。在</p>
<pre><code>#if @isfloat@
if (@isnan@(mp)) {
/* nan encountered; it's maximal */
return 0;
}
#endif
</code></pre>
<p>欢迎来自经验丰富的<code>c</code>程序员的评论,但在我看来,至少对于<code>np.nan</code>,一个简单的<code>argmax</code>将与我们所能得到的一样快。在</p>
<p>在生成<code>a</code>时使用<code>9999</code>表明<code>a.argmax</code>时间依赖于该值,与短路一致。在</p>