作家
登录

Python数据预处理:使用Dask和Numba并行化加速

作者: 来源: 2018-03-13 14:03:50 阅读 我要评论

因为我是根据一些简单的线性运算(根本上是勾股定理)对数据进行分类,所以认为应用类似下面的Python代码会运行得更快一些。

  1. for i in intersections: 
  2.     l3 = np.sqrt( (i[0] - [1])**2 + (i[2] - i[3])**2 ) 
  3. # ... Some more of these 
  4.     dist = l1 + l2 
  5.     if dist < (l3 * 1.2): 
  6.         matches.append(dist) 
  7. # ... More stuff 
  8. ### you get the idea, there's a for-loop checking to see if 
  9. ### my points are close to my streets and then returning 
  10. closest 
  11. ### I even used numpy, that means fast right

Python数据预处理:应用Dask和Numba并行化加快

Broadcasting用以描述Numpy中对两个外形不合的矩阵进行数学计算的处理机制。假设我有一个数组,我会经由过程迭代并逐个变换每个单位格来改变它

为了可以或许应用Numba编译JIT,我重写了函数以更好地应用broadcasting。之后,从新运行这些函数后发明,平均而言,对于雷同的代码,JIT的履行速度大年夜约快了24%。

  1. # over one array 
  2. for cell in array: 
  3.      cell * CONSTANT - CONSTANT2 
  4. # over two arrays 
  5. for i in range(len(array)): 
  6.      array[i] = array[i] + array2[i] 

相反,我完全可以跳过for轮回,并半数个数组履行操作。Numpy与broadcasting混淆应用,用来履行元素智能乘积(对位相乘)。

二者看起来很类似,apply核心语句是map_partitions,最后有一个compute()语句。此外,不得纰谬npartitions初始化。 分区的工作道理就是将Pandas数据帧划分成块,对于我的电脑而言,设备是6核-12线程,我只需告诉它应用的是12分区,Dask就会完成剩下的工作。

  1. # over one array 
  2. (array * CONSTANT) - CONSTANT2 
  3. # over two arrays of same length 
  4. # different lengths follow broadcasting rules 
  5. array = array - array2 
  1. from numba import jit 
  2. @jit # numba magic 
  3. def some_func() 
  4.      l3_arr = np.sqrt( (intersections[:,0] - 
  5. intersections[:,1])**2 +\ 
  6.                                (intersections[:,2] - 
  7. intersections[:,3])**2 ) 
  8. # now l3 is an array containing all of my block lengths 

      推荐阅读

      教你如何区别单模与多模光纤

    沙龙晃荡 | 3月31日 京东、微博拭魅战专家与你合营商量容器技巧实践! 单模光纤的纤芯较细,使光线可以或许直接>>>详细阅读


    本文标题:Python数据预处理:使用Dask和Numba并行化加速

    地址:http://www.17bianji.com/lsqh/40675.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)