zoukankan      html  css  js  c++  java
  • python 一些方法的时间测试

    尝试一些方法的不同实现,比较一下时间,电脑比较渣,不过只是做个比较

    虽然用python主要是方便,肯定是不快的,不过能快一点还是快一点好

    numpy中大量使用同样 shape 的全 0 array,可以使用 np.zero() 方法或者是先开一个之后 copy:

    1 %%time
    2 for i in range(5000000):
    3     a = np.zeros((100,10))
    4     a = np.zeros((100,10))
    5     a = np.zeros((100,10))
    Wall time: 17.1 s
    1 %%time
    2 b = np.zeros((100,10))
    3 for i in range(5000000):
    4     a = b.copy()
    5     a = b.copy()
    6     a = b.copy()
    Wall time: 15.1 s

    貌似先开一个,之后copy比较快,不过差异不明显

    range() 还是 np.arrange(),最近用 array 有点多,经常啥都开 array

    1 %%time
    2 for p in range(50000):
    3     a = np.arange(100000)
    Wall time: 3.72 s
    %%time
    for p in range(50000):
        a = range(100000)
    Wall time: 31 ms

    差距还是非常明显(不用想都知道2333),如果不需要用 array 方法的时候,还是 list 好了

    访问 list 等下标,用 range(长度),不过先保存长度成常量还是多次用 len 方法

    1 %%time
    2 a = np.arange(100000)
    3 l = len(a)
    4 for p in range(50000000):
    5     range(l)
    Wall time: 23.3 s
    1 %%time
    2 a = np.arange(100000)
    3 for p in range(50000000):
    4     range(len(a))
    Wall time: 27.9 s

    就这样看,应该调用 len 方法还是有点慢的,虽然差异也不是非常大,len 应该不是 O(n) 实现,可能是对象直接保存的一个属性,不过访问起来还是先存下来更快点

    遍历一个 array ,同时使用标号

    我会遍历下标长度的一个 list 来遍历它,用 zip 把标号和 array 合并,或者 emunerate ,或者干脆维护一个 id,循环中累加

    1 %%time
    2 for i in range(5000000):
    3     a = np.arange(10,30)
    4     l = len(a)
    5     for id in range(l):
    6         x = id+a[id]
    Wall time: 50 s
    1 %%time
    2 for i in range(5000000):
    3     a = np.arange(10,30)
    4     b = zip(range(len(a)),a)
    5     for item1,item2 in b:
    6         x = item1+item2
    Wall time: 51.2 s
    1 %%time
    2 for i in range(5000000):
    3     a = np.arange(10,30)
    4     c = enumerate(a)
    5     for item1,item2 in c:
    6         x = item1+item2
    Wall time: 52.3 s
    1 %%time
    2 for i in range(5000000):
    3     a = np.arange(10,30)
    4     d = zip(np.arange(len(a)),a)
    5     for item1,item2 in d:
    6         x = item1+item2
    Wall time: 52.9 s
    1 %%time
    2 for i in range(5000000):
    3     a = np.arange(10,30)
    4     id = 0
    5     for item in a:
    6         x = id+item
    7         id += 1
    Wall time: 1min 1s

    看上去只有维护 id 累加最慢,其他都差别不太大,那只要条件允许大概还是按 C 的习惯开一个下标的 list 来遍历下标好了

  • 相关阅读:
    knockout之ko if绑定和ifnot绑定
    inline-block去掉空白距离的方法
    DOM
    $(document).ready()与window.onload的区别
    white-space: nowrap
    商品列表属性过滤
    for循环与for in循环
    表单验证
    表单验证四个步骤
    ID和Name的区别
  • 原文地址:https://www.cnblogs.com/cenariusxz/p/8860508.html
Copyright © 2011-2022 走看看