2012-11-23 9 views
5

के साथ वेक्टरोरकृत वर्ष/माह/दिन संचालन, मैं साल, महीनों और दिनों के 1-डी वैक्टर से न्यूमपी डेटाटाइम 64 ऑब्जेक्ट्स के वैक्टर बनाना चाहता हूं, और रिवर्स दिशा भी लेना चाहता हूं, जो वर्षों के वैक्टर निकालने जा रहा है, महीने, या दैनिक डेटाटाइम 64 वेक्टर से दिन। मैं NumPy 1.7.0b2 का उपयोग कर रहा हूँ।NumPy डेटाटाइम 64

उदाहरण के लिए, मान लीजिए

years = [1990, 1992, 1995, 1994] 
months = [1, 6, 3, 7] 
days = [3, 20, 14, 27] 

अब मैं लंबाई 4 के एक np.datetime64 वेक्टर इन वर्षों, महीनों और दिनों का उपयोग कर बनाना चाहते हैं। क्या पाइथन लूप का उपयोग किए बिना कोई रास्ता है?

दूसरी दिशा में जाकर, मान लीजिए dates डेटाैटइप np.datetime64 का वेक्टर है और आवृत्ति दैनिक है। तो मैं x.DAYS() जैसे कुछ करने में सक्षम होना चाहता हूं और वेक्टर [3, 20, 14, 27] वापस प्राप्त कर सकता हूं।

उत्तर

0

मैं पाशन के कुछ प्रकार के बिना यह करने के लिए एक तरह से के बारे में पता नहीं है, लेकिन मैं इसे एक सूची समझ के साथ एक सा inlined:

years = [1990, 1992, 1995, 1994] 
months = [1, 6, 3, 7] 
days = [3, 20, 14, 27] 
np.array(['{0[0]}-{0[1]}-{0[2]}'.format(x) for x in zip(years, months, days)], dtype='datetime64') 

वापस दूसरे रास्ते जा रहे हैं, तो आप प्रत्येक कन्वर्ट करने के लिए है नियमित datetime पर आइटम। आप इसे astype(object) पर कॉल करके कर सकते हैं, जो पूरे सरणी के लिए या व्यक्तिगत वस्तुओं के लिए काम करता है। आप जो भी करते हैं वह इस बात पर निर्भर करता है कि आप डेटा का उपयोग कैसे करते हैं।

2
import numpy as np 
def combine64(years, months=1, days=1, weeks=None, hours=None, minutes=None, 
       seconds=None, milliseconds=None, microseconds=None, nanoseconds=None): 
    years = np.asarray(years) - 1970 
    months = np.asarray(months) - 1 
    days = np.asarray(days) - 1 
    types = ('<M8[Y]', '<m8[M]', '<m8[D]', '<m8[W]', '<m8[h]', 
      '<m8[m]', '<m8[s]', '<m8[ms]', '<m8[us]', '<m8[ns]') 
    vals = (years, months, days, weeks, hours, minutes, seconds, 
      milliseconds, microseconds, nanoseconds) 
    return sum(np.asarray(v, dtype=t) for t, v in zip(types, vals) 
       if v is not None) 

years = [1990, 1992, 1995, 1994] 
months = [1, 6, 3, 7] 
days = [3, 20, 14, 27] 

print(combine64(years, months, days)) 

पैदावार

array(['1990-01-03', '1992-06-20', '1995-03-14', '1994-07-27'], dtype='datetime64[D]')