在 python 中对齐三个时间序列
align three time series in python
我有以下时间序列:
我想仅在时间 = 800 之后对齐信号,基于对齐最小点。
我尝试了以下方法来对齐 pandas 中的两个信号:
from pandas import *
import pandas as pd
s1 = Series(vec1)
s2 = Series(vec2)
s3 = s1.align(s2,join='inner')
s1 = np.array(s1)
s2 = np.array(s2)
s3 = np.array(s3)
plt.plot(t,s1)
plt.plot(t,s2)
plt.plot(t,s3)
plt.show()
它显示了与原始形式完全一致的对齐信号。关于如何实现最小对齐有什么建议吗?
有点粗糙,但为什么不实现一个while循环呢?
将 numpy 导入为 np
将 pandas 导入为 pd
# assuming you are shifting s2 to the left
# cut off at 800 s
s1 = s1[s1.index>=800]
s2 = s2[s2.index>=800]
while s2.index[s2==s2.min()]>s1.index[s1==s1.min()]:
s2 = s2[801:]
s2.index = np.arange(800,800 + s2.shape[0])
找到并对齐最小值:
import matplotlib.pyplot as plt #making toy data
x = np.arange(0, 2, .05)
s = []
s.append(np.sin(x*3))
s.append(np.cos(x*4+0.3))
s.append(np.sin(x)*np.exp(2-x)*-1)
plt.clf()
plt.plot(x, s[0], x, s[1], x, s[2])
plt.show()
plt.clf()
mindexes = [i.argmin() for i in s] #finding the minima
shifts = mindexes - min(mindexes)
def shifted(shift, x, s):
if shift == 0: #x[:-0] was not what I wanted.
return x, s
else:
return x[:-1*shift], s[shift:]
for i in (0,1,2):
px, py = shifted(shifts[i], x, s[i])
plt.plot(px, py)
plt.show()
我有以下时间序列:
我想仅在时间 = 800 之后对齐信号,基于对齐最小点。
我尝试了以下方法来对齐 pandas 中的两个信号:
from pandas import *
import pandas as pd
s1 = Series(vec1)
s2 = Series(vec2)
s3 = s1.align(s2,join='inner')
s1 = np.array(s1)
s2 = np.array(s2)
s3 = np.array(s3)
plt.plot(t,s1)
plt.plot(t,s2)
plt.plot(t,s3)
plt.show()
它显示了与原始形式完全一致的对齐信号。关于如何实现最小对齐有什么建议吗?
有点粗糙,但为什么不实现一个while循环呢? 将 numpy 导入为 np 将 pandas 导入为 pd
# assuming you are shifting s2 to the left
# cut off at 800 s
s1 = s1[s1.index>=800]
s2 = s2[s2.index>=800]
while s2.index[s2==s2.min()]>s1.index[s1==s1.min()]:
s2 = s2[801:]
s2.index = np.arange(800,800 + s2.shape[0])
找到并对齐最小值:
import matplotlib.pyplot as plt #making toy data
x = np.arange(0, 2, .05)
s = []
s.append(np.sin(x*3))
s.append(np.cos(x*4+0.3))
s.append(np.sin(x)*np.exp(2-x)*-1)
plt.clf()
plt.plot(x, s[0], x, s[1], x, s[2])
plt.show()
plt.clf()
mindexes = [i.argmin() for i in s] #finding the minima
shifts = mindexes - min(mindexes)
def shifted(shift, x, s):
if shift == 0: #x[:-0] was not what I wanted.
return x, s
else:
return x[:-1*shift], s[shift:]
for i in (0,1,2):
px, py = shifted(shifts[i], x, s[i])
plt.plot(px, py)
plt.show()