python – 为什么不是“numpy.any”懒惰(短路)

python – 为什么不是“numpy.any”懒惰(短路),第1张

概述我不明白为什么还没有进行如此基本的优化: In [1]: %timeit np.ones(10**6).any()100 loops, best of 3: 7.32 ms per loopIn [2]: %timeit np.ones(10**7).any()10 loops, best of 3: 59.7 ms per loop 即使结论是第一项的证据,也扫描整个阵列. 这是一个不确 我不明白为什么还没有进行如此基本的优化:

@H_419_8@

@H_419_8@

In [1]: %timeit np.ones(10**6).any()100 loops,best of 3: 7.32 ms per loopIn [2]: %timeit np.ones(10**7).any()10 loops,best of 3: 59.7 ms per loop

即使结论是第一项的证据,也扫描整个阵列.@H_419_8@解决方法 这是一个不确定的性能回归. NumPy issue 3446.实际上有 short-circuiting logic,但是对ufunc.reduce机器的改变在短路逻辑周围引入了一个不必要的基于块的外环,而外环不知道如何短路.您可以看到有关分块机械 here的一些解释.

@H_419_8@

尽管如此,即使没有回归,短路效应也不会出现在你的测试中.首先,你正在为数组创建计时,其次,我不认为他们曾经为任何输入dtype输入短路逻辑而是布尔.从讨论中,它听起来像numpy背后的ufunc减少机制的细节.任何人都会这么难.@H_419_8@

讨论确实提出了一个令人惊讶的观点,即argmin和argmax方法似乎是布尔输入的短路. A quick test显示,从NumPy 1.12开始(不是最新版本,但目前在IDeone上的版本),x [x.argmax()]短路,并且它超过x.any()和x.max()无论输入是小还是大,无论短路是否得到回报,一维布尔输入.奇怪的!@H_419_8@ 总结

以上是内存溢出为你收集整理的python – 为什么不是“numpy.any”懒惰(短路)全部内容,希望文章能够帮你解决python – 为什么不是“numpy.any”懒惰(短路)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/1194326.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存