gpt4 book ai didi

python - 在 Python 中对一维数据执行移动线性拟合

转载 作者:太空狗 更新时间:2023-10-30 02:49:38 25 4
gpt4 key购买 nike

我有一个一维数据数组,希望提取空间变化。执行此操作的标准方法是对数据执行移动线性回归并保存梯度...

def nssl_kdp(phidp, distance, fitlen):
kdp=zeros(phidp.shape, dtype=float)
myshape=kdp.shape
for swn in range(myshape[0]):
print "Sweep ", swn+1
for rayn in range(myshape[1]):
print "ray ", rayn+1
small=[polyfit(distance[a:a+2*fitlen], phidp[swn, rayn, a:a+2*fitlen],1)[0] for a in xrange(myshape[2]-2*fitlen)]
kdp[swn, rayn, :]=array((list(itertools.chain(*[fitlen*[small[0]], small, fitlen*[small[-1]]]))))
return kdp

这很好但很慢......我需要这样做 17*360 次......

我想开销是在 [for in arange] 行的迭代器中......在 numpy/scipy 中是否有移动配合的实现?

最佳答案

线性回归的计算基于各种值的总和。因此您可以编写一个更高效的例程,在窗口移动时修改总和(添加一个点并减去较早的一个点)。

这将比每次窗口移动时都重复该过程更有效,但会出现舍入误差。因此您偶尔需要重新启动。

通过预先计算所有 x 依赖关系,对于等距点,您可能会做得比这更好,但我不了解您的示例的详细信息,因此不确定它是否相关。

所以我想我会假设它是。

斜率是 (NΣXY - (ΣX)(ΣY))/(NΣX2 - (ΣX)2) 其中“2”是“平方” - http://easycalculation.com/statistics/learn-regression.php

对于均匀分布的数据,分母是固定的(因为您可以在不改变梯度的情况下将 x 轴移动到窗口的起点)。分子中的 (ΣX) 也是固定的(同理)。所以你只需要关心 ΣXY 和 ΣY。后者是微不足道的 - 只需添加和减去一个值。前者每一步递减ΣY(每个X权重递减1),递增(N-1)Y(假设x_0为0,x_N为N-1)。

我怀疑这还不清楚。我的意思是,斜率的公式不需要每一步都完全重新计算。特别是因为在每一步中,您都可以在不更改斜率的情况下将 X 值重命名为 0,1,...N-1。所以公式中的几乎所有内容都是相同的。所有这些变化都是两项,这取决于 Y,因为 Y_0“退出”窗口而 Y_N“移入”。

关于python - 在 Python 中对一维数据执行移动线性拟合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7288125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com