具有2d numpy数组,我正在执行以下操作:
rows_count = matrix.shape[0]
mr = []
for i in range(0, rows_count-1):
for j in range(i+1, rows_count):
mr.append(matrix[i,:] ^ matrix[j:])
它确实可以满足我的要求,但是对于大型输入数组而言,它太慢了。这就是为什么我想使用multiprocessing
来加快代码速度的原因:
import multiprocessing as mp
import numpy as np
pool = mp.Pool(mp.cpu_count())
mr = pool.map(np.bitwise_xor,[(matrix[i,:],matrix[j,:]) for i in range(0, rows_count-1) for j in range(i+1, rows_count)])
pool.join()
pool.close()
但是,此代码的运行速度慢了几倍。如何正确使用multiprocessing
(或其他概念)来加快代码的速度?
答案 0 :(得分:0)
结帐numba!
您的新代码看起来像这样
from numba import jit
@jit(parallel=True) #yes this decorator and flag is all it takes to run the function in parallel
def my_time_cosuming_thing(mr=[],matrix=np.array(), rows_count=matrix.shape[0])
for i in range(0, rows_count-1):
for j in range(i+1, rows_count):
mr.append(matrix[i,:] ^ matrix[j:])
return mr
创建Numba的目的是通过使python循环并行运行来提高python循环的效率,并在http://numba.pydata.org/处进行检查
它也与numpy兼容,因此应该可以大大加快代码的运行速度,就像魔术一样,效果很好,我再也没有写嵌套循环了