因为我是根据一些简单的线性运算(根本上是勾股定理)对数据进行分类,所以认为应用类似下面的Python代码会运行得更快一些。
- for i in intersections:
- l3 = np.sqrt( (i[0] - [1])**2 + (i[2] - i[3])**2 )
- # ... Some more of these
- dist = l1 + l2
- if dist < (l3 * 1.2):
- matches.append(dist)
- # ... More stuff
- ### you get the idea, there's a for-loop checking to see if
- ### my points are close to my streets and then returning
- closest
- ### I even used numpy, that means fast right?
Broadcasting用以描述Numpy中对两个外形不合的矩阵进行数学计算的处理机制。假设我有一个数组,我会经由过程迭代并逐个变换每个单位格来改变它
为了可以或许应用Numba编译JIT,我重写了函数以更好地应用broadcasting。之后,从新运行这些函数后发明,平均而言,对于雷同的代码,JIT的履行速度大年夜约快了24%。
- # over one array
- for cell in array:
- cell * CONSTANT - CONSTANT2
- # over two arrays
- for i in range(len(array)):
- array[i] = array[i] + array2[i]
相反,我完全可以跳过for轮回,并半数个数组履行操作。Numpy与broadcasting混淆应用,用来履行元素智能乘积(对位相乘)。
二者看起来很类似,apply核心语句是map_partitions,最后有一个compute()语句。此外,不得纰谬npartitions初始化。 分区的工作道理就是将Pandas数据帧划分成块,对于我的电脑而言,设备是6核-12线程,我只需告诉它应用的是12分区,Dask就会完成剩下的工作。
- # over one array
- (array * CONSTANT) - CONSTANT2
- # over two arrays of same length
- # different lengths follow broadcasting rules
- array = array - array2
- from numba import jit
- @jit # numba magic
- def some_func()
- l3_arr = np.sqrt( (intersections[:,0] -
- intersections[:,1])**2 +\
- (intersections[:,2] -
- intersections[:,3])**2 )
- # now l3 is an array containing all of my block lengths
推荐阅读
沙龙晃荡 | 3月31日 京东、微博拭魅战专家与你合营商量容器技巧实践! 单模光纤的纤芯较细,使光线可以或许直接>>>详细阅读
本文标题:Python数据预处理:使用Dask和Numba并行化加速
地址:http://www.17bianji.com/lsqh/40675.html
1/2 1