2012-09-13 54 views
1

我有一個numpy.ndarray。前兩列是類型datetime.datetime的日期。我想找出兩者之間的差異(以天數爲單位)*(12/365)。所以我想通過減去兩個日期時間來訪問timedelta對象的.days屬性。我不能這樣做:(MyArray[1] - MyArray[0]).days因爲Python不知道期待timedelta對象。在C#中,我可能會嘗試像這樣投射:從timedelta對象的numpy.ndarray獲取days屬性

((timedelta)(MyArray[1] - MyArray[0])).days 

在Python(numpy)中這樣做的方法是什麼?我需要循環嗎?

回答

2

不幸的是,這是不可行的沒有你的timedelta

deltas = MyArray[1]-MyArray[0] 
diff_days = np.fromiter((d.days for d in deltas), dtype=float, count=len(deltas)) 

這裏陣列上進行迭代,我們使用np.fromitercount說法更有效率(它預先分配數組的大小)。

注意的是,新datetime64dtype在此日期(2012/09)不讓你得到像days性質。

+0

謝謝。我不明白你的最後一段,但是......你是說如果我沒有任何日子實例化日期時間對象,那麼我不能讓日子回來?另外我使用datetime而不是datetime64,datetime64有一些優點嗎? – Dan

+0

@Dan'np.datetime64'是NumPy中一個新的'dtype',爲NumPy進行了優化。你的'MyArray [1]'實際上有一個'dtype = object',* ie *它是對象的'ndarray',每個對象都是'datetime'。 '對象'dtype數組的效率不如常規數組... –

+0

你是說我寧願使用numpy.datetime64比datetime.datetime這種類型的應用程序?或者你是否說,儘管numpy.datetime64更可取,但在此版本中,它不具備完成我所描述的功能的功能? – Dan