如何优化这个数据平滑python循环



我正试图在一组数据上创建一个数据平滑函数。为了做到这一点,我正在收集一个数据数组,并由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秒。非常感谢所有的帮助者!

如果输入数据是多维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

用50%的x和y数据训练克里格模型(仅为多项式插值(,然后在整个x集上对模型进行^y评估,怎么样?克里格模型代码示例(使用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)

最新更新