python - 使用多处理改进矩阵运算时间
问题描述
拥有一个 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
(或其他概念)来加速我的代码?
解决方案
结帐麻木!
你的新代码看起来像这样
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 循环超级高效,请在http://numba.pydata.org/上查看
它也与 numpy 兼容,因此这应该会显着加快您的代码速度,它就像魔术一样,效果很好,我再也不会在没有它的情况下编写嵌套循环
推荐阅读
- javascript - 如何在某些异步数据(在 Vuex 存储中)加载之前防止任何路由?
- c - UVa 1225“数字计数”的 C“运行时错误”
- javascript - 后期“手动”将元素升级为定制的内置 Web 组件
- excel - 使用VBA检索特定列中同一行中单元格的值
- node.js - Typescript 和 Jest:避免模拟函数上的类型错误
- python - 以正确的格式获取文本以用于 spacy
- sql-server - 如何衡量 Azure SQL DB 的性能?
- android - ViewRenderable not working ARCore
- javascript - 如何识别已标记为 Redact 的 PDF 中的原始单词?
- css - 不同数量的 div 布局