栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用numpy在for循环中进行多核处理

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用numpy在for循环中进行多核处理

我们可以利用

broadcasting
基于NumPy的解决方案-

ss = np.exp(1j*(ph[:,None] + fre[:,None]*tau))

将此移植

numexpr
以利用快速
transcendental
操作以及多核功能-

import numexpr as nedef numexpr_soln(ph, fre):    ph2D = ph[:,None]    fre2D = fre[:,None]    return ne.evaluate('exp(1j*(ph2D + fre2D*tau))')

时间-

In [23]: num_row, num_col = 6000, 13572    ...: ss = np.ones((num_row, num_col), dtype=np.complex128)    ...: ph = np.random.standard_normal(num_row)    ...: fre = np.random.standard_normal(num_row)    ...: tau = np.random.standard_normal(num_col)# Original solnIn [25]: %%timeit    ...: for idx in range(num_row):    ...:     ss[idx, :] *= np.exp(1j*(ph[idx] + fre[idx]*tau))1 loop, best of 3: 4.46 s per loop# Native NumPy broadcasting solnIn [26]: %timeit np.exp(1j*(ph[:,None] + fre[:,None]*tau))1 loop, best of 3: 4.58 s per loop

对于具有不同数量的内核/线程的Numexpr解决方案-

# Numexpr solution with # of threads = 2In [51]: ne.set_num_threads(nthreads=2)Out[51]: 2In [52]: %timeit numexpr_soln(ph, fre)1 loop, best of 3: 2.18 s per loop# Numexpr solution with # of threads = 4In [45]: ne.set_num_threads(nthreads=4)Out[45]: 4In [46]: %timeit numexpr_soln(ph, fre)1 loop, best of 3: 1.62 s per loop# Numexpr solution with # of threads = 8In [48]: ne.set_num_threads(nthreads=8)Out[48]: 8In [49]: %timeit numexpr_soln(ph, fre)1 loop, best of 3: 898 ms per loop


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/651180.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号