如何优化此数据平滑 python 循环?
How can I optimize this data smoothing python loop?
我正在尝试对我正在使用 savitzky golay 过滤器的一组数据进行数据平滑处理,我正在收集一组数据并通过 Scipy 调用该函数。
但是因为我在不同的框架中循环一个特定的元素,所以我没有空间局部性也没有时间局部性。
dataobj.body.data[j][0][i]
持有 (x,y)
而我只收集 y
s.
这是以下循环:
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 秒。
非常感谢所有的帮助者!
如何使用 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)
如果输入数据是一个多维的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
我正在尝试对我正在使用 savitzky golay 过滤器的一组数据进行数据平滑处理,我正在收集一组数据并通过 Scipy 调用该函数。
但是因为我在不同的框架中循环一个特定的元素,所以我没有空间局部性也没有时间局部性。
dataobj.body.data[j][0][i]
持有 (x,y)
而我只收集 y
s.
这是以下循环:
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 秒。 非常感谢所有的帮助者!
如何使用 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)
如果输入数据是一个多维的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