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 来遍历下标好了

  • 相关阅读:
    vue-fullcalendar插件
    iframe 父框架调用子框架的函数
    关于调试的一点感想
    hdfs 删除和新增节点
    hadoop yarn 实战错误汇总
    Ganglia 安装 No package 'ck' found
    storm on yarn(CDH5) 部署笔记
    spark on yarn 安装笔记
    storm on yarn安装时 提交到yarn失败 failed
    yarn storm spark
  • 原文地址:https://www.cnblogs.com/cenariusxz/p/8860508.html
Copyright © 2011-2022 走看看