擅长:python、mysql、java
<p>在一个大小为<code>n</code>且窗口大小为<code>m</code>的数组上计算通用滚动函数大约需要<code>O(n*m)</code>时间。内置的<code>rollin_xxx</code>方法使用一些非常聪明的算法来保持运行时间远低于该时间,并且通常可以保证<code>O(n)</code>时间,如果你认为这是一件令人印象深刻的事情。在</p>
<p><code>rolling_min</code>和{<cd7>}尤其是借用了<a href="https://pypi.python.org/pypi/Bottleneck">bottleneck</a>的实现,后者引用了<a href="http://www.richardhartersworld.com/cri/2001/slidingmin.html">Richard Harter</a>作为算法的源代码,尽管我在{a3}中发现了我认为的相同算法的早期描述。在</p>
<p>所以在历史课之后:很有可能你不能吃你的蛋糕。<code>rolling_apply</code>非常方便,但它几乎总是牺牲特定算法的性能。根据我的经验,使用Python科学堆栈的一个更有趣的部分是,使用以创造性方式提供的快速原语来实现高效的计算方法。您自己的解决方案调用<code>rolling_max</code>两次就是一个很好的例子。因此,放松并享受这段旅程吧,要知道,如果你或其他好人无法找到更明智的解决方案,你将永远有机会依靠。在</p>