Python 使用多处理提高矩阵运算时间

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

使用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
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行,并看到它逐渐停止