从 python 实施 R 包 TSdist
Implement R package TSdist from python
我正在尝试从 python jupyter 笔记本实施 R 包 TSdist。
import rpy2.robjects.numpy2ri
from rpy2.robjects.packages import importr
rpy2.robjects.numpy2ri.activate()
R = rpy2.robjects.r
## load in package
TSdist = importr('TSdist')
## t,c are two series
dist = TSdist.ERPDistance(t.values,c.values,g=0,sigma =30)
## dist is a R Boolean vector with one value
dist[0]
这给了我一个 NA,我收到了一个警告:
/usr/lib64/python3.4/site-packages/rpy2/rinterface/init.py:186:
RRuntimeWarning: Error : The series must be univariate vectors
warnings.warn(x, RRuntimeWarning)
关于如何正确实施它的任何想法?或者如何使用离散傅里叶变换 (DFT)、自回归系数、真实序列编辑距离 (EDR) 来测量 python 包的时间序列相似性。 this 论文中提到的方法。
可能的原因是两个 series 对象被传递到方法中。假设系列意味着 pandas 系列 ,调用 values
returns 一个 numpy 数组。根据 docs,ERPDistance
需要数值向量,而不是数组。
print(type(pd.Series(np.random.randn(5))))
# <class 'pandas.core.series.Series'>
print(type(pd.Series(np.random.randn(5)).values))
# <class 'numpy.ndarray'>
考虑将系列简单地转换为具有基数 R 的 numeric 向量或使用 rpy2 的 FloatVector
:
from rpy2.robjects.packages import importr
R = rpy2.robjects.r
## load in package
base = importr('base')
TSdist = importr('TSdist')
new_t = base.as_numeric(t.tolist())
print(type(new_t))
# <class 'rpy2.robjects.vectors.FloatVector'>
new_c = rpy2.robjects.FloatVector(c.tolist())
print(type(new_c))
# <class 'rpy2.robjects.vectors.FloatVector'>
## new_t, new_c are now numeric vectors
dist = TSdist.ERPDistance(new_t, new_c, g=0, sigma =30)
我正在尝试从 python jupyter 笔记本实施 R 包 TSdist。
import rpy2.robjects.numpy2ri
from rpy2.robjects.packages import importr
rpy2.robjects.numpy2ri.activate()
R = rpy2.robjects.r
## load in package
TSdist = importr('TSdist')
## t,c are two series
dist = TSdist.ERPDistance(t.values,c.values,g=0,sigma =30)
## dist is a R Boolean vector with one value
dist[0]
这给了我一个 NA,我收到了一个警告:
/usr/lib64/python3.4/site-packages/rpy2/rinterface/init.py:186: RRuntimeWarning: Error : The series must be univariate vectors
warnings.warn(x, RRuntimeWarning)
关于如何正确实施它的任何想法?或者如何使用离散傅里叶变换 (DFT)、自回归系数、真实序列编辑距离 (EDR) 来测量 python 包的时间序列相似性。 this 论文中提到的方法。
可能的原因是两个 series 对象被传递到方法中。假设系列意味着 pandas 系列 ,调用 values
returns 一个 numpy 数组。根据 docs,ERPDistance
需要数值向量,而不是数组。
print(type(pd.Series(np.random.randn(5))))
# <class 'pandas.core.series.Series'>
print(type(pd.Series(np.random.randn(5)).values))
# <class 'numpy.ndarray'>
考虑将系列简单地转换为具有基数 R 的 numeric 向量或使用 rpy2 的 FloatVector
:
from rpy2.robjects.packages import importr
R = rpy2.robjects.r
## load in package
base = importr('base')
TSdist = importr('TSdist')
new_t = base.as_numeric(t.tolist())
print(type(new_t))
# <class 'rpy2.robjects.vectors.FloatVector'>
new_c = rpy2.robjects.FloatVector(c.tolist())
print(type(new_c))
# <class 'rpy2.robjects.vectors.FloatVector'>
## new_t, new_c are now numeric vectors
dist = TSdist.ERPDistance(new_t, new_c, g=0, sigma =30)