2013-02-17 107 views
33

numpy.timedelta64変数から時間差を秒単位で取得する方法はありますか?numpy.timedelta64から秒単位の時間差

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 

私は、秒単位の時間差を表す数値(intやfloat型)にdtを変換したいと思います。

答えて

24

あなたは「ラップ」日時項目を介してアクセスすることができます

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

説明:こちらをdtはゼロ順位配列または0次元配列であるnumpyarray scalar、です。したがって、dtにはndarrayが持っているすべてのメソッドがあり、例えばdt.astype('float')のような方法があります。しかし、Pythonオブジェクトをラップします。この場合はdatetime.timedeltaオブジェクトです。

元のスカラーを取得するには、dt.item()を使用します。インデックスにあなたは空のタプルを使用して、GetItem関数のやや奇妙な構文を使用することができ、配列スカラー:

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

これはnumpyのすべてのバージョンで動作するはずですが、あなたはnumpyのV1.7を使用している+それができると便利場合J.F. Sebastienここの答えで説明されているように、新しいnumpy datetime APIを直接使用してください。

+0

働いたおかげで、。 dt.secondsが機能しない理由を説明してください。 – sashkello

+4

それは 'datetime.timedelta'ですが、それは' numpy.timedelta64'ではなく、そのような名前の属性を持っています。なぜnumpyがそのように実装したのか分かりませんが、他の人が答えるかもしれません。 – wim

54

numpy 1.7 experimental datetime APIを使用してnumpy.timedelta64()オブジェクトからの秒数を取得するには:

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

おそらく別のバージョンを使用していますか?私は 'TypeError:関数は' np.timedelta64(1、 's') ' – wim

+4

@wim:yesを試してみるときに、最大で1つの引数(2与えられます)をとります。 [1.6と1.7のAPIが異なる](http://docs.scipy.org/doc/numpy-dev/reference/arrays.datetime.html#datetime-and-timedelta-arithmetic) – jfs

+6

この回答はアレイでも機能します。 – Yariv

関連する問題