在计算值之前,是否可以确定tck元组中由scipy.interpolate.splprep返回的数组的数组长度?
我必须对含有500万个数据点(或更少,可以是可变的)的噪声数据进行样条插值。我观察到,在阵列长度为90的情况下,插补效果很好,而对于较高的阵列长度计算插补则需要很长时间(有时还会直接从~ 90跳到~ 1000,同时使s变小一步,也会产生噪声),如果阵列长度远小于(<50),则这是不够合适的。
实际上,这种阵列长度依赖于平滑因子s提供给splprep函数,但是对于不同的测量数据,s变化很大,得到一致的阵列长度在90左右。例如,对于data1 的,的值大约为1000才能得到len(cfk[0]) = 90,而对于data2 的,在相同的data1长度和data2的情况下,的值大约为100才能得到len(cfk[0]) = 90。它可能取决于数据的噪音..。
我已经考虑过一个循环,在这个循环中,的从某个点开始,并在不断检查len(cfk[0])时通过循环减少--但这需要很长时间,特别是当len(cfk[0])接近90时。
因此,在计算cfk元组之前,以某种方式知道平滑因子以得到所需的阵列长度是很有用的。
发布于 2019-06-06 20:26:46
简短的回答:不,不容易。分片包装的Dierckx库使用一些相当重要的逻辑来确定纽结向量,所有这些都被写入了Fortran代码中。因此,唯一的办法是仔细追踪后者。它可以从netlib获得,也可以从scipy/插值/fitpack获得。
https://stackoverflow.com/questions/56477397
复制相似问题