Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Dask加速参数测试_Python_Pandas_Dask - Fatal编程技术网

Python 使用Dask加速参数测试

Python 使用Dask加速参数测试,python,pandas,dask,Python,Pandas,Dask,我有一个时间序列数据框,大约有10列,我在其中对时间序列执行操作,以返回策略数据的结果。我想测试两个参数,因为它们可能相互影响,也可能不相互影响。当独立测试时,每次运行每个单元需要超过10秒(总运行时间超过6.5小时),我希望加快速度。我一直在阅读有关dask的内容,似乎它是正确的模块。 我当前的代码使用嵌套循环遍历每个参数范围。我知道它可以并行,因为每天的数据是互斥的。 代码如下: amount1=np.arange(.001,.03,.0005) amount2=np.arange(.001

我有一个时间序列数据框,大约有10列,我在其中对时间序列执行操作,以返回策略数据的结果。我想测试两个参数,因为它们可能相互影响,也可能不相互影响。当独立测试时,每次运行每个单元需要超过10秒(总运行时间超过6.5小时),我希望加快速度。我一直在阅读有关dask的内容,似乎它是正确的模块。 我当前的代码使用嵌套循环遍历每个参数范围。我知道它可以并行,因为每天的数据是互斥的。
代码如下:

amount1=np.arange(.001,.03,.0005)
amount2=np.arange(.001,.03,.0005)


def getResults(df,amount1,amount2):
    final_results=[]
    for x in tqdm(amount1):
        for y in amount2:
            df1=None
            df1=function1(df.copy(), x, y ) #takes about 2sec.
            df1=function2(df1)    #takes about 2sec.
            df1=function3(df1)    #takes about 3sec.
            final_results.append([x,y,df1['results'].iloc[-1]])
    return final_results   
更新:

因此,看起来应该通过调整函数来改进,以从调用中删除迭代,并创建作业列表(我的理解。这就是我目前的情况。我可能需要将我的df移动到dask数据帧,以便将数据分块成更小的部分。问题是我是否将函数1、2和3保留为向量运算,还是它们需要移动以完成dask函数

def getResults(df,amount):
    df1=None
    df1=dsk.delayed(function1)(df,amount[0],amount[1] )
    df1=dsk.delayed(function2)(df1)
    df1=dsk.delayed(function2)(df1)
    return [amount[0],amount[1],df1['results'].iloc[-1]]


#Create a list of processes from jobs.  jobs is a list of tuples that replaces the iteration.
processes =[getResults(df,items) for items in jobs]

#Create a process list of results
results=[]
for i in range(len(processes):
    results.append(processes[i])  

您可能想要使用或接口

类似于下面的内容可能会很好地工作(未经测试,我建议您阅读上面引用的文档以了解它在做什么)


另外,我会避免调用
df.copy()
如果可以避免的话。理想情况下,函数1不会改变输入数据。

是否需要对两个范围进行彻底测试?您是否考虑过至少对其中一个进行半随机采样?我不介意结果返回到热图,以便确定一个值范围。您是否建议使用网格搜索?您应该避免使用dask de在dask延迟函数中进行了设置谢谢我发现了这一点。我很感激。谢谢。我阅读并有了更好的理解。我重新调整了函数,并将其放在上面的更新中。我现在对上面的问题仍然存在。
def getResults(df,amount1,amount2):
    final_results=[]
    for x in amount1:
        for y in amount2:
            df1=None
            df1=dask.delayed(function1)(df.copy(), x, y ) 
            df1=dask.delayed(function2)(df1) 
            df1=dask.delayed(function3)(df1) 
            final_results.append([x,y,df1['results'].iloc[-1]])
    return final_results   

out = getResults(df, amount1, amount2)
result = delayed(out).compute()