当使用范围表达式迭代大数组时,我应该使用Python的内置范围函数还是numpyarange
来获得最佳性能?
到目前为止,我的推理是:
arange
可能求助于本机实现,因此可能会更快。另一方面,arange
返回一个占用内存的完整数组,因此可能会产生开销。Python
3的范围表达式是一个生成器,它不会在内存中保存所有值。
对于大型数组,numpy应该是更快的解决方案。
在numpy中,您应该结合使用向量化计算,ufuncs和索引来解决问题,因为它可以C
快速运行。与此相比,遍历numpy数组效率低下。
(最糟糕的事情是,使用在问题中的第一句话所示的range
或创建的索引来遍历数组np.arange
,但是我不确定您是否真的是这样。)
import numpy as np
import sys
sys.version
# out: '2.7.3rc2 (default, Mar 22 2012, 04:35:15) \n[GCC 4.6.3]'
np.version.version
# out: '1.6.2'
size = int(1E6)
%timeit for x in range(size): x ** 2
# out: 10 loops, best of 3: 136 ms per loop
%timeit for x in xrange(size): x ** 2
# out: 10 loops, best of 3: 88.9 ms per loop
# avoid this
%timeit for x in np.arange(size): x ** 2
#out: 1 loops, best of 3: 1.16 s per loop
# use this
%timeit np.arange(size) ** 2
#out: 100 loops, best of 3: 19.5 ms per loop
因此,在这种情况下,numpy比正确使用numpy快4倍xrange
。根据您的问题,numpy的速度可能比速度提高4到5倍要快得多。
对这些问题的答案这个问题说明了使用numpy的阵列,而不是蟒蛇列出了大型数据集的一些有利条件。
问题内容: 我想知道,如果有人能告诉我,范围函数如何采用:单个参数,或或。它是否使用一个参数来收集参数,然后使用一系列if语句根据所提供的参数数量来分配正确的值?从本质上说,它规定,如果有一个参数,然后将其设置成停止争论,或者如果有两个那么他们,和,或者如果有三个然后设置这些作为,和分别?我想知道如果要用纯Cpython编写范围怎么办。谢谢!!! 更新 :当我最初问这个问题时,我并没有澄清我想知道
问题内容: 使用哪种更好或更方便: 要么 问题答案: 您是否完全需要类型属性?如果您使用的是HTML5,则不会。否则,是的。HTML 4.01和XHTML 1.0 根据需要指定属性,而HTML5具有可选属性,默认为。HTML5现在得到了广泛的实现,因此,如果您使用HTML5doctype,则是有效且不错的选择。 至于type属性中应该包含的内容,2006年注册的MIME类型旨在替代所有主要浏览器(
问题内容: 我有这个表达: 这些元素的(,,)有优先权? 您能用方括号显示操作顺序吗? 问题答案: 首先,然后,然后。 您的表情将被评估为。 https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html
问题内容: 在或中时,将更改的范围。您如何访问调用范围? 问题答案: 记录在文本/模板文档中: 开始执行时,将$设置为传递给Execute的数据参数,即dot的起始值。
当开发一个需要我唯一识别手机用户的应用程序时。我希望得到一些关于使用手机UDID还是IMEI的建议。使用这两种方法有什么优点/缺点吗。如有任何意见,将不胜感激
问题内容: 我试图找出一种方法来更改每个打印的步骤值 我尝试过的 问题答案: 我建议为此使用循环实现自己的生成器。范例- 然后,您可以将其用作- 我们这样做是可以进行任何迭代的。 演示-