Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用';固定点';_Python_Scipy_Time Series_Spline_Interpolation - Fatal编程技术网

Python 用';固定点';

Python 用';固定点';,python,scipy,time-series,spline,interpolation,Python,Scipy,Time Series,Spline,Interpolation,我有周期性(相当于正弦)的时间序列数据。我根据周期对数据进行了相位调整,以便所有点都位于0和1之间。您可以将其视为从0到其周期2pi的正弦波采样点。这里有一个典型的例子: 我已尝试使用各种scipy.interpolate函数对该数据进行插值,例如: >>> scipy.interpolate.UnivariateSpline(x,y)(numpy.linspace(0, 0.99, 100)) array([ 15.13403109, 15.10173144, 15.0

我有周期性(相当于正弦)的时间序列数据。我根据周期对数据进行了相位调整,以便所有点都位于0和1之间。您可以将其视为从0到其周期2pi的正弦波采样点。这里有一个典型的例子:

我已尝试使用各种
scipy.interpolate
函数对该数据进行插值,例如:

>>> scipy.interpolate.UnivariateSpline(x,y)(numpy.linspace(0, 0.99, 100))
array([ 15.13403109,  15.10173144,  15.07070986,  15.04094629,
        15.01242068,  14.98511296,  14.95900308,  14.93407098,
        14.91029659,  14.88765987,  14.86614074,  14.84571915,
        14.82637504,  14.80808836,  14.79083904,  14.77460702,
        14.75937224,  14.74511465,  14.73181418,  14.71945078,
        14.70800439,  14.69745494,  14.68778239,  14.67896666,
        14.6709877 ,  14.66382545,  14.65745985,  14.65187085,
        14.64703838,  14.64294238,  14.6395628 ,  14.63687957,
        14.63487264,  14.63352194,  14.63280742,  14.63270902,
        14.63320668,  14.63428034,  14.63590994,  14.63807542,
        14.64075672,  14.64393378,  14.64758655,  14.65169496,
        14.65623896,  14.66119848,  14.66655347,  14.67228387,
        14.67836961,  14.68479064,  14.69152691,  14.69855834,
        14.70586488,  14.71342648,  14.72122306,  14.72923458,
        14.73744098,  14.74582219,  14.75435815,  14.76302882,
        14.77181411,  14.78069399,  14.78964838,  14.79865724,
        14.80770049,  14.81675809,  14.82580996,  14.83483606,
        14.84381632,  14.85273069,  14.8615591 ,  14.87028149,
        14.87887781,  14.887328  ,  14.895612  ,  14.90370974,
        14.91160117,  14.91926624,  14.92668487,  14.93383702,
        14.94070261,  14.9472616 ,  14.95349392,  14.95937952,
        14.96489834,  14.9700303 ,  14.97475537,  14.97905347,
        14.98290455,  14.98628855,  14.98918541,  14.99157507,
        14.99343747,  14.99475255,  14.99550026,  14.99566053,
        14.9952133 ,  14.99413852,  14.99241612,  14.99002605])
例如,x为(请注意,某些值重复):

例如,y是:

>>> y
array([ 15.048,  15.046,  15.046,  15.037,  15.035,  15.048,  15.034,
        15.041,  15.03 ,  15.034,  15.037,  15.04 ,  15.038,  15.028,
        14.998,  14.976,  15.012,  15.007,  14.996,  14.979,  14.922,
        14.876,  14.881,  14.931,  14.912,  14.904,  14.906,  14.897,
        14.871,  14.786,  14.778,  14.78 ,  14.782,  14.788,  14.729,
        14.735,  14.661,  14.722,  14.668,  14.657,  14.715,  14.647,
        14.607,  14.627,  14.607,  14.625,  14.619,  14.592,  14.583,
        14.596,  14.596,  14.595,  14.584,  14.593,  14.601,  14.597,
        14.605,  14.596,  14.61 ,  14.6  ,  14.582,  14.609,  14.606,
        14.619,  14.601,  14.612,  14.619,  14.612,  14.612,  14.618,
        14.619,  14.62 ,  14.62 ,  14.619,  14.633,  14.629,  14.611,
        14.62 ,  14.629,  14.618,  14.645,  14.634,  14.633,  14.644,
        14.647,  14.649,  14.67 ,  14.661,  14.658,  14.67 ,  14.667,
        14.682,  14.676,  14.675,  14.68 ,  14.67 ,  14.673,  14.676,
        14.68 ,  14.654,  14.689,  14.699,  14.694,  14.691,  14.699,
        14.703,  14.683,  14.691,  14.706,  14.703,  14.715,  14.73 ,
        14.727,  14.72 ,  14.729,  14.718,  14.712,  14.721,  14.734,
        14.722,  14.738,  14.724,  14.73 ,  14.729,  14.735,  14.751,
        14.741,  14.752,  14.753,  14.765,  14.758,  14.759,  14.766,
        14.766,  14.774,  14.774,  14.768,  14.775,  14.789,  14.788,
        14.793,  14.787,  14.783,  14.808,  14.789,  14.793,  14.804,
        14.804,  14.793,  14.805,  14.808,  14.811,  14.825,  14.816,
        14.827,  14.827,  14.827,  14.838,  14.83 ,  14.839,  14.848,
        14.844,  14.834,  14.838,  14.845,  14.861,  14.856,  14.847,
        14.853,  14.868,  14.845,  14.857,  14.859,  14.859,  14.868,
        14.853,  14.871,  14.873,  14.875,  14.893,  14.882,  14.883,
        14.884,  14.899,  14.904,  14.907,  14.909,  14.903,  14.909,
        14.909,  14.91 ,  14.911,  14.904,  14.909,  14.933,  14.923,
        14.924,  14.907,  14.928,  14.913,  14.939,  14.944,  14.946,
        14.952,  14.935,  14.946,  14.943,  14.948,  14.952,  14.957,
        14.974,  14.981,  14.967,  14.967,  14.977,  14.987,  14.97 ,
        15.013,  14.98 ,  15.011,  15.004,  15.013,  15.   ,  15.017,
        15.02 ,  15.047,  15.03 ,  15.05 ,  15.029,  15.043,  15.038,
        15.03 ,  15.042,  15.052])
函数在0处的计算结果应该(几乎)与1相同,因为基础数据是周期性的(就像我们期望插值正弦的函数在0处的值与在2pi处的值相同)。然而,它显然有很长的左偏,与0附近的数据不太相似。0和1处的值之间的差值约为0.144,大于数据集的标准偏差


有什么想法吗?我可以在设置固定点时进行某种插值吗,即边界的起点和终点应该大致相同的规范?

splrep/
splev
对函数声称支持周期样条曲线,c.f.
per
参数

它在单变量PLINE中不可用是一个错误。这是一个最小的实现(但最好不要使用它,因为访问
\u数据
可能不向后兼容):


您可以尝试
单变量样条线(相位,磁位,s=0)
以确保获得无平滑的纯插值。沃伦:不幸的是,这对我不起作用。生成的样条曲线在所有输入上返回“nan”。事实上,scipy.interpolate.InterpolatedUnivariateSpline给出了同样的不幸结果。您解决了吗?我也有类似的问题,我想知道numpy.polyfit是否也适合你。。。它使用n次曲线工作,但也许你可以用第三或第四个多项式来近似你的正弦函数。是的,我最终使用了numpy.polyfit。我不能让它对我工作。你能解释一下如何使用它吗?当我仅用x和y的参数调用它时,会得到一系列错误,结果样条曲线对所有输入返回0。另外,当我试图用数据调用splrep时,我得到ValueError:输入数据错误。有什么想法吗?你认为重复一些X值重要吗?换句话说,数据中有多个具有相同X坐标的点。例如,(0.102,14.996)和(0.102,14.979)都在数据中。对于重复的点,我会收到一条错误消息:
以下条件必须保持不变:xbI将其更改为不存在重复点。但是,当在0和1之间求值时,得到的样条曲线给出了无意义的答案。结果似乎在-5000和5000之间随机变化,没有明显的模式。这是我试过的文件:,你还有什么想法吗?(再次感谢您的帮助)您的观察结果对我来说太吵了,无法进行插值。当s=0.1时,我得到了一条带有pus_点[0],pus_点[-1](14.867401700528857,14.868547533207527)的参差不齐的正弦曲线。感谢pv的配方,我不知道scipy中的样条曲线有一个周期选项。
>>> y
array([ 15.048,  15.046,  15.046,  15.037,  15.035,  15.048,  15.034,
        15.041,  15.03 ,  15.034,  15.037,  15.04 ,  15.038,  15.028,
        14.998,  14.976,  15.012,  15.007,  14.996,  14.979,  14.922,
        14.876,  14.881,  14.931,  14.912,  14.904,  14.906,  14.897,
        14.871,  14.786,  14.778,  14.78 ,  14.782,  14.788,  14.729,
        14.735,  14.661,  14.722,  14.668,  14.657,  14.715,  14.647,
        14.607,  14.627,  14.607,  14.625,  14.619,  14.592,  14.583,
        14.596,  14.596,  14.595,  14.584,  14.593,  14.601,  14.597,
        14.605,  14.596,  14.61 ,  14.6  ,  14.582,  14.609,  14.606,
        14.619,  14.601,  14.612,  14.619,  14.612,  14.612,  14.618,
        14.619,  14.62 ,  14.62 ,  14.619,  14.633,  14.629,  14.611,
        14.62 ,  14.629,  14.618,  14.645,  14.634,  14.633,  14.644,
        14.647,  14.649,  14.67 ,  14.661,  14.658,  14.67 ,  14.667,
        14.682,  14.676,  14.675,  14.68 ,  14.67 ,  14.673,  14.676,
        14.68 ,  14.654,  14.689,  14.699,  14.694,  14.691,  14.699,
        14.703,  14.683,  14.691,  14.706,  14.703,  14.715,  14.73 ,
        14.727,  14.72 ,  14.729,  14.718,  14.712,  14.721,  14.734,
        14.722,  14.738,  14.724,  14.73 ,  14.729,  14.735,  14.751,
        14.741,  14.752,  14.753,  14.765,  14.758,  14.759,  14.766,
        14.766,  14.774,  14.774,  14.768,  14.775,  14.789,  14.788,
        14.793,  14.787,  14.783,  14.808,  14.789,  14.793,  14.804,
        14.804,  14.793,  14.805,  14.808,  14.811,  14.825,  14.816,
        14.827,  14.827,  14.827,  14.838,  14.83 ,  14.839,  14.848,
        14.844,  14.834,  14.838,  14.845,  14.861,  14.856,  14.847,
        14.853,  14.868,  14.845,  14.857,  14.859,  14.859,  14.868,
        14.853,  14.871,  14.873,  14.875,  14.893,  14.882,  14.883,
        14.884,  14.899,  14.904,  14.907,  14.909,  14.903,  14.909,
        14.909,  14.91 ,  14.911,  14.904,  14.909,  14.933,  14.923,
        14.924,  14.907,  14.928,  14.913,  14.939,  14.944,  14.946,
        14.952,  14.935,  14.946,  14.943,  14.948,  14.952,  14.957,
        14.974,  14.981,  14.967,  14.967,  14.977,  14.987,  14.97 ,
        15.013,  14.98 ,  15.011,  15.004,  15.013,  15.   ,  15.017,
        15.02 ,  15.047,  15.03 ,  15.05 ,  15.029,  15.043,  15.038,
        15.03 ,  15.042,  15.052])
from scipy.interpolate import UnivariateSpline, splrep

class PeriodicUnivariateSpline(UnivariateSpline):
    def __init__(self, x, y, w=None, bbox=[None]*2, k=3, s=0):
        #_data == x,y,w,xb,xe,k,s,n,t,c,fp,fpint,nrdata,ier
        tck, fp, ier, msg = splrep(x, y, k=k, w=w, xb=bbox[0], xe=bbox[1],
                                   s=s, per=1, full_output=1)
        self._data = (x,y,w,bbox[0],bbox[1],k,s,len(tck[0]),tck[0],tck[1],
                      fp,None,None,ier)
        self._reset_class()