【问题标题】:numpy vs list comprehension, which is faster? [closed]numpy 与列表理解,哪个更快? [关闭]
【发布时间】:2017-05-10 02:19:46
【问题描述】:

我进行了一个比较 numpy 和 python 列表理解的简单速度测试,显然列表理解更快。对吗?

import sys, numpy
from datetime import datetime

def numpysum(n):
    a = numpy.arange(n) ** 2
    b = numpy.arange(n) ** 3
    return a + b

def pythonsum(n):
    a = [i ** 2 for i in range(n)]
    b = [i ** 3 for i in range(n)]
    return [a[i] + b[i] for i in range(n)]

size = 10
start = datetime.now()
c1 = pythonsum(size)
delta1 = datetime.now() - start

start = datetime.now()
c2 = numpysum(size)
delta2 = datetime.now() - start

print c1
print c2

print delta1
print delta2

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    我认为您可能需要考虑改变您的测试参数:

    In [39]: %timeit pythonsum(10)
    100000 loops, best of 3: 8.41 us per loop
    
    In [40]: %timeit pythonsum(100)
    10000 loops, best of 3: 51.9 us per loop
    
    In [41]: %timeit pythonsum(1000)
    1000 loops, best of 3: 451 us per loop
    
    In [42]: %timeit pythonsum(10000)
    100 loops, best of 3: 17.9 ms per loop
    
    In [43]: %timeit numpysum(10)
    100000 loops, best of 3: 13.4 us per loop
    
    In [44]: %timeit numpysum(100)
    100000 loops, best of 3: 17 us per loop
    
    In [45]: %timeit numpysum(1000)
    10000 loops, best of 3: 50.3 us per loop
    
    In [46]: %timeit numpysum(10000)
    1000 loops, best of 3: 385 us per loop
    

    Numpy 与列表理解时间的比率:

    10:0.6 倍

    100:3.1 倍

    1000:9 倍

    10000:46 倍

    因此,对于大型 N,Numpy 更快。

    【讨论】:

      【解决方案2】:

      您的size 太小。我用size=1000000 再次尝试,numpy 的性能比列表理解高 9 倍。

      我猜 numpy 的设置开销更高,但通常对于非平凡的输入大小(10 绝对是微不足道的),您可以期望它至少与列表理解一样快,并且在大多数情况下要快得多.

      【讨论】:

        猜你喜欢
        • 2021-08-23
        • 2021-11-28
        • 1970-01-01
        • 2013-01-09
        • 2013-07-13
        • 2011-12-10
        • 1970-01-01
        • 2014-07-06
        • 2020-08-14
        相关资源
        最近更新 更多