繁体   English   中英

如何在 Python 3.7 中快速并行化 function?

[英]How to Parallize the function fastly in Python 3.7?

我有一个包含 200 个数据帧的列表,我正在尝试应用 function 但是。 我正在尝试在 python 中应用并行 function 以加快速度,但无法获得所需的结果。 下面是我的代码数据是 DataFrame 的列表,具有相同的列和行但不同的值

import pandas as pd
import multiprocessing as mp
   def maxloc(data): 
        data['loc_max'] = np.zeros(len(data))
        for i in range(1,len(data)-1):  
            if data['value'][i] >= data['value'][i-1] and data['value'][i] >= data['value'][i+1]:
                data['loc_max'][i] = 1
        return data  

    pool = mp.Pool(mp.cpu_count())
    results = pool.map(maxloc, [row for row in data])
    pool.close() 
    pool.join()

这是一个使用 scipy.signal.argrelextrema 的 maxloc 实现,并且速度要快得多(在此示例中超过 1000 倍):

import pandas as pd
from scipy.signal import argrelextrema 
np.random.seed(42)

def maxloc(data): 
    data['loc_max'] = np.zeros(len(data))
    for i in range(1,len(data)-1):  
        if data['value'][i] >= data['value'][i-1] and data['value'][i] >= data['value'][i+1]:
            data['loc_max'][i] = 1
    return data 

def maxloc_faster(data):
    loc_opt_ind = argrelextrema(df.value.to_numpy(), np.greater)
    loc_max = np.zeros(len(data))
    loc_max[loc_opt_ind] = 1
    data['loc_max'] = loc_max
    return data

让我们测试一下

values = np.random.rand(10000)
df = pd.DataFrame({'value': values})
np.all(maxloc_faster(df).loc_max == maxloc(df).loc_max)
# True

%timeit maxloc(df)
# 672 ms ± 39.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

%timeit maxloc_faster(df)
# 268 µs ± 12.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM