2013-02-17 15 views
33

Numpy.timedelta64 değişkeninden saniye cinsinden zaman farkı nasıl alınır?numpy.timedelta64'ten saniye cinsinden zaman farkı

time1 = '2012-10-05 04:45:18' 
time2 = '2012-10-05 04:44:13' 
dt = np.datetime64(time1) - np.datetime64(time2) 
print dt 

0:01:05 

I saniye zaman farkını temsil eden sayı dt dönüştürmek (int veya float) istiyorum.

cevap

24

Sen "sarılmış" datetime öğesi üzerinden erişebilecek:

>>> dt.item().total_seconds() 
65.0 

Açıklama: Burada dt sıfır rütbe dizi veya 0 boyutlu dizidir numpy bir array scalar vardır. Böylece dt'u burada bulabilirsiniz, ayrıca bir ndarrayın sahip olduğu tüm yöntemleri de vardır ve örneğin dt.astype('float')'u yapabilirsiniz. Fakat bu bir python nesnesini sarar, bu durumda datetime.timedelta nesnesi.

Orijinal skaler'i almak için dt.item()'u kullanabilirsiniz. endekse dizi sayıl boş bir tuple kullanılarak GetItem biraz tuhaf sözdizimi kullanabilirsiniz: Eğer numpy v1.7 kullanıyorsanız

>>> dt[()] 
array(datetime.timedelta(0, 65), dtype='timedelta64[s]') 

Bu Numpy tüm sürümlerinde çalışacaktır ama + o daha iyi olabilir J.F. Sebastien cevabında açıklandığı gibi, yeni numpy datetime API'sini doğrudan kullanın.

seconds = dt/np.timedelta64(1, 's') 
+0

teşekkür çalıştı: – sashkello

+4

Bu "numpy.timedelta64" değil, benzeri bir özniteliği olan "datetime.timedelta" dır. Neden numpy bunun böyle uygulandığını bilmiyorum, belki de başka biri cevap verebilir .. – wim

54

numpy 1.7 experimental datetime API kullanılarak numpy.timedelta64() nesneden kaç saniye almak için. Neden dt.seconds'ın çalışmadığını açıklayabilir misiniz?
+0

Belki farklı versiyonlar kullanıyoruz? TypeError'um var: işlev, np.timedelta64 (1, 's') ' – wim

+4

@wim: yes çalışırken en fazla 1 argüman (2 verilen) alır. [1.6 ve 1.7 API farklıdır] (http://docs.scipy.org/doc/numpy-dev/reference/arrays.datetime.html#datetime-and-timedelta-arithmetic). – jfs

+6

Bu cevap ayrıca dizilerde de çalışır. – Yariv

İlgili konular