【问题标题】:How can I optimize this data smoothing python loop?如何优化此数据平滑 python 循环?
【发布时间】:2021-08-26 01:36:10
【问题描述】:

我正在尝试对一组数据进行数据平滑函数,为此我正在使用 savitzky golay 过滤器,我正在收集一组数据并通过 Scipy 调用该函数。 但是由于我在不同框架中循环遍历特定元素,因此我没有空间局部性或时间局部性。 dataobj.body.data[j][0][i] 持有(x,y),我只收集ys。

这是以下循环:

def smooth_data(dataobj):
    number_of_frames = len(dataobj.body.data)
    for i in range(0, 137):
        arr = []
        for j in range(0, number_of_frames):
            arr.append(dataobj.body.data[j][0][i][1])
        newdata = scipy.signal.savgol_filter(arr, 25, 3)
        for k in range(0, number_of_frames):
            dataobj.body.data[k][0][i][1] = newdata[k]
    return dataobj

我想让它工作得更快,现在当帧数超过 1000 时,它需要相当长的时间,比如 30 秒。 非常感谢所有的帮助者!

【问题讨论】:

    标签: python loops optimization scipy smoothing


    【解决方案1】:

    如果输入数据是多维numpy数组,那么可以将numpy数组的一个切片传入scipy方法,然后将得到的数组插回原始数据对象中:

    def smooth_data(dataobj):
        number_of_frames = len(dataobj[:,0,0,1])
        number_of_records = len(dataobj[0,0,:,1])
        for i in range(0, number_of_records):
            newdata = scipy.signal.savgol_filter(dataobj[:,0,i,1], 3, 1)
            dataobj[:][0][i][1] = newdata
        return dataobj
    

    【讨论】:

    • 嘿Conor,数组的初始化是在循环内,因为我没有在同一个数组上重复做平滑函数。
    • 啊,是的,对不起。在这种情况下,最好的办法是尝试传入原始数组的一部分,以节省复制它。它是一个普通的 Python 数组还是一个 numpy 数组?你能控制形状吗?
    • 这是一个 numpy 数组,因为您已经注意到外部循环从 0 工作到一个常数,但是帧数正在变化,所以我看不到如何控制形状在这种情况下可能会有所帮助。
    • 好的,如果它是一个 numpy 数组,您应该能够将切片传递给 scipy,我编辑了答案以反映这一点。
    • 嘿,Conor 成功了,现在更快了,非常感谢
    【解决方案2】:

    如何使用 50% 的 x 和 y 数据训练 Krige 模型(仅是多项式插值),然后对整个集合 x 进行模型的 ^y 评估? Krige模型代码示例(使用smt模块):

    from smt.surrogate_models import KRG
    t= KRG(theta0=[1e-2]*ndim,print_prediction = False)
    t.set_training_values(xt,yt) #training inputs, outputs
    t.train()
    
    # Prediction of the other points
    y = t.predict_values(xtest)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-17
      • 1970-01-01
      • 2013-08-28
      • 1970-01-01
      • 2020-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多