Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与Python列表相比,Numpy数组必须有多大才能从它的效率中获益_Python_Arrays_List_Numpy - Fatal编程技术网

与Python列表相比,Numpy数组必须有多大才能从它的效率中获益

与Python列表相比,Numpy数组必须有多大才能从它的效率中获益,python,arrays,list,numpy,Python,Arrays,List,Numpy,我一直听说Numpy阵列处理大量数据的速度更快。但是一个Numpy数组需要多少数据才能取代标准Python数组的效率(技术上是列表) 谢谢。例如,如果您想将所有元素设置为1,那么numpy在10个元素时对我来说更快,可能之前我没有检查: >>> import timeit >>> timeit.timeit('for i in r: a[i] = 1', setup='a = [0]*10; r=range(len(a))') 0.37777304649353

我一直听说Numpy阵列处理大量数据的速度更快。但是一个Numpy数组需要多少数据才能取代标准Python数组的效率(技术上是列表)


谢谢。

例如,如果您想将所有元素设置为1,那么numpy在10个元素时对我来说更快,可能之前我没有检查:

>>> import timeit
>>> timeit.timeit('for i in r: a[i] = 1', setup='a = [0]*10; r=range(len(a))')
0.3777730464935303
>>> timeit.timeit('b[:] = 1', setup='import numpy; b=numpy.array([0]*10)')
0.3234739303588867
对于1000个元素,第一个元素的速度约为100倍,第二个元素的速度仅为2倍


但这完全取决于你需要做什么。如果您可以通过使用numpy ISM避免for循环(如assing to b[:]),那么numpy的速度非常快;如果必须使用for循环,那么它不会有多大帮助。

例如,如果要将所有元素设置为1,那么numpy在10个元素时对我来说更快,可能之前我没有检查:

>>> import timeit
>>> timeit.timeit('for i in r: a[i] = 1', setup='a = [0]*10; r=range(len(a))')
0.3777730464935303
>>> timeit.timeit('b[:] = 1', setup='import numpy; b=numpy.array([0]*10)')
0.3234739303588867
对于1000个元素,第一个元素的速度约为100倍,第二个元素的速度仅为2倍


但这完全取决于你需要做什么。如果您可以通过使用numpy ISM避免for循环(如assing to b[:]),那么numpy的速度非常快;如果必须使用for循环,那么它将不会有多大帮助。

这可能取决于运行它的机器和用于编译东西的编译器,以及用于运行程序的特定python版本和正在运行的确切程序。也就是说,回答这个问题几乎是不可能的。制作一个基准程序并自己测量。您可以使用
timeit
并比较
10**n
元素集合上的数组操作
numpy
不仅速度快,而且比相应的列表使用更少的内存,并且为许多操作提供了更简洁的语法。@Halp:他指的是用于编译Python和numpy的编译器。@Halp
numpy
的一个主要优点是向量化操作,即不是通过列表循环执行操作正如您所说的“通过函数传递它们”,您可以将整个
ndarray
传递到函数中,然后一次处理所有内容(假设您的函数是矢量化的)。如果从列表开始,则创建数组是主要的开销。完成后,大多数数组操作会更快。如果从数组开始,则采用类似列表的迭代(例如使用标量函数)这可能取决于你运行它的机器和用来编译东西的编译器,以及用来运行程序的特定python版本和你正在运行的确切程序。也就是说,这几乎不可能回答。制作一个基准程序并自己测量。你可以使用
timeit
并比较
10**n
元素集合上的数组操作。
numpy
不仅速度快,而且比相应的列表使用更少的内存,并为许多操作提供更简洁的语法。@Halp:他指的是用于编译Python和numpy的编译器。@Halp
numpy
的主要优点之一是对操作进行矢量化,也就是说,您可以将整个
ndarray
传递到函数中,然后一次对其进行处理(假设您的函数已矢量化),而不是像您所说的那样通过一个列表来“使它们通过一个函数”。如果从列表开始,则创建数组是主要的开销。完成后,大多数数组操作会更快。如果从数组开始,则诉诸类似列表的迭代(例如使用标量函数)会大大降低速度。