Python 使用多处理提高矩阵运算时间
使用2d numpy数组,我将执行以下操作:Python 使用多处理提高矩阵运算时间,python,python-3.x,numpy,python-multiprocessing,Python,Python 3.x,Numpy,Python Multiprocessing,使用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:]) 这正是我想要的,但对于大型输入阵列来说速度太慢了。这就是为什么我想使用多处理来加速我的代码: import multiprocessing as mp
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:])
这正是我想要的,但对于大型输入阵列来说速度太慢了。这就是为什么我想使用多处理
来加速我的代码:
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()
但是,此代码的工作速度要慢两倍。如何正确使用多处理
(或其他概念)来加速我的代码?签出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循环超级高效,它试图使它们并行运行,请访问
它还与numpy兼容,因此这将大大加快您的代码速度,这就像魔术一样,效果非常好,我再也不会在没有它的情况下编写嵌套循环了请查看Joblib,这使它更容易编写。不幸的是,此解决方案似乎比简单for loop更慢。这很奇怪,很抱歉,这看起来像是一个插件,但我在一个项目中实现了它,如果没有numba,它根本无法工作,也许可以尝试复制它?您可以尝试注释掉@jit行,并看到它逐渐停止