当前位置: 首页 > 面试题库 >

内置范围或numpy.arange:哪个更有效?

隆飞宇
2023-03-14
问题内容

当使用范围表达式迭代大数组时,我应该使用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的建议。使用这两种方法有什么优点/缺点吗。如有任何意见,将不胜感激

  • 问题内容: 我试图找出一种方法来更改每个打印的步骤值 我尝试过的 问题答案: 我建议为此使用循环实现自己的生成器。范例- 然后,您可以将其用作- 我们这样做是可以进行任何迭代的。 演示-