python中的有界圆插值

python中的有界圆插值,python,numpy,scipy,interpolation,Python,Numpy,Scipy,Interpolation,我的问题与这个问题类似。简单来说,我有一个时间序列角度数据,它的范围在[0360]之间。我需要计算测量值之间的关联。目前,我正在使用。为了让我的问题更清楚,这里有一个例子 import numpy as np from scipy import interpolate data = np.array([[0, 2, 4], [1, 359, 1]]) # first row time index, second row angle measurements f = interpolate.int

我的问题与这个问题类似。简单来说,我有一个时间序列角度数据,它的范围在[0360]之间。我需要计算测量值之间的关联。目前,我正在使用。为了让我的问题更清楚,这里有一个例子

import numpy as np
from scipy import interpolate
data = np.array([[0, 2, 4], [1, 359, 1]]) # first row time index, second row angle measurements
f = interpolate.interp1d(data[0, :], data[1, :], kind='linear', bounds_error=False, fill_value=None)
f([1, 3])
这将导致[180,180.]。但是,在时间2和时间4之间,角度从359变为1,这只是2度的变化,3处的插值应为0。角度随时间沿逆时针方向变化

最后,我的问题是

是否有任何标准模块可用于实现此目标


只是因为我想尽量避免使用自定义方法

只要在每次检测到跳转时添加360°补码,然后使用模运算返回到第一个360度。例如:

In [1]: import numpy as np

In [2]: from scipy import interpolate

In [3]: data = np.array([[0, 2, 4, 6, 8], [1, 179, 211, 359, 1]])

In [4]: complement360 = np.rad2deg(np.unwrap(np.deg2rad(data[1])))

In [5]: complement360
Out[5]: array([   1.,  179.,  211.,  359.,  361.])

In [6]: f = interpolate.interp1d(data[0], complement360, kind='linear', bounds_error=False, fill_value=None)

In [7]: f(np.arange(9))
Out[7]: array([   1.,   90.,  179.,  195.,  211.,  285.,  359.,  360.,  361.])

In [8]: f(np.arange(9))%360
Out[8]: array([   1.,   90.,  179.,  195.,  211.,  285.,  359.,    0.,    1.])
注意,我确实在这里添加了一些额外的值,否则,
np.unwrap
没有实际的方法来知道角度在哪个方向增加,这可能也是你知道角度以这种方式增加的原因(除非存在实际的不连续性,否则连续值之间的差值小于180°)

但是,如果您确实有数据使两个连续项目之间的角度跳跃大于180°,但您知道角度变化的方向(例如CCW),并且它是单调变化的,那么您可以这样检测:

In [31]: data = np.array([1, 359, 1, 60, 359, 177, 2])  # mock-data

In [32]: jumps = np.diff(data)<0  # assumptions: angle increases stricly monotonously CCW

In [33]: np.hstack((data[0], data[1:] + np.cumsum(np.sign(d)<0)*360))
Out[33]: array([   1,  359,  361,  420,  719,  897, 1082])
[31]中的
data=np.array([1359,1,60359,177,2])#mock data

在[32]:jumps=np.diff(data)中,从1.10.0版开始,numpy.interp使用句点关键字:

By
standard
您是指Python发行版的一部分还是numpy,SciPy?你有没有花时间看文档?是的,你是对的,我指的是Numpy,SciPy中的任何东西(我不想有只能用来解决这个特定问题的东西)。我试着看了文档,但正如你所说,我对插值的了解不超过直线,方向是角度在变化-顺时针还是逆时针?这是如何确定的?角度是逆时针变化的。numpy.interp的period关键字表示x轴周期性,而不是y轴周期性,因此这似乎无法解决问题。