2017-07-17 16 views
7

से आर पैकेज टीएसडीस्ट लागू करें मैं पाइथन जिप्टर नोटबुक से आर पैकेज 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] 

यह मैं एक एनए देता है और मैं एक चेतावनी मिल गया:

/usr/lib64/python3.4/site-packages/rpy2/rinterface/ init .py: 186: RRuntimeWarning: त्रुटि: श्रृंखला univariate वैक्टर होना चाहिए

warnings.warn (एक्स, RRuntimeWarning)

कोई इसे सही तरीके से कार्यान्वित करने के विचार क्या हैं? या असतत फूरियर ट्रांसफॉर्म (डीएफटी), ऑटो-रेग्रेशिव गुणांक, वास्तविक अनुक्रम (ईडीआर) पर दूरी संपादित करें का उपयोग कर पाइथन पैकेज के साथ समय श्रृंखला समानता को मापने के लिए कैसे करें। this पेपर में उल्लिखित तरीके।

+0

त्रुटि की संभावना है * पहले * 'जिले [0]', जब 'बुला ERPDistance() ', और आर कोड द्वारा जारी त्रुटि संदेश के रूप में आप चलाने की कोशिश कर रहे हैं यह इंगित करता है कि आपका इनपुट अमान्य है। – lgautier

+1

मैंने आर कार्यान्वयन में कार्य के इस कार्यान्वयन ('TSdist.ERPDistance (t.values, c.values, g = 0, सिग्मा = 30)') की कोशिश की है और यह काम करता है। और पायथन में कार्यान्वयन को इस पोस्ट के साथ संदर्भित किया गया है: https://stackoverflow.com/questions/5695388/dynamic-time-warping-in-python। –

उत्तर

2

संभावित कारण यह है कि विधि में दो श्रृंखला ऑब्जेक्ट्स को पारित किया जा रहा है। मान लीजिए श्रृंखला पांडा श्रृंखला, values पर कॉल करने से एक 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'> 

बस आधार आर के साथ सांख्यिक वैक्टर के रूप में श्रृंखला कास्टिंग या का उपयोग 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)