python并行计算numpy_使用Numpy和Joblib在Python中进行并行化

我想从MATLAB转向开源替代品,如scipy和numpy . 但是,我的速度有些问题 . 我知道,由于过度使用,有时多核操作可能比单核慢,但是,我试图做一个实际上由MATLAB加速的过程 .

我有一个函数,可以对2D矩阵的每个像素进行一些数学运算 . 我使用3个嵌套循环来做到这一点 .

def reconstruct2D(frame, parameters):

"""

Does some nested for loop operations on 2D data

"""

for channel_i in range(nr_cols): # for every channel

for y in range(nr_rows):

for x in range(nr_cols):

# Do some calculations here

我通常在MATLAB中做的是为3D矩阵的每个第三个维度调用此函数 .

parfor frameNo = 1:N

result(:,:,frameNo) = reconstruct2D(rawFrame(:,:,frameNo), parameters);

end

然后,当4核处于活动状态时,它变快四倍 . 但是,当我通过使用Joblib尝试相同的事情时,它仍然按顺序执行 .

import numpy as np

from scipy import signal

from joblib import Parallel, delayed

def reconstruct2D(frame, parameters):

# Same as above

if __name__ == '__main__':

print('Main Loop is running...')

Parallel(n_jobs=4)(delayed(reconstruct2D(frame[:, :, indx], parameters)) for indx in range(N))

print('Main Loop is finished...')

在Python中,单帧的处理时间也要慢得多 . 它在MATLAB中需要1.8s,在Python中需要19s .

我基本上有两个问题:

有没有人知道单帧处理在Python中慢10倍的原因?

为什么joblib按顺序计算帧而不是同时计算?

我使用的是带有4个内核的Windows7 64位硬件中的Python 3.5 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值