の UTC で時刻を表すオブジェクトに変換するnumpy.datetime64
には:datetime
numpy-1.8
>>> from datetime import datetime
>>> import numpy as np
>>> dt = datetime.utcnow()
>>> dt
datetime.datetime(2012, 12, 4, 19, 51, 25, 362455)
>>> dt64 = np.datetime64(dt)
>>> ts = (dt64 - np.datetime64('1970-01-01T00:00:00Z')) / np.timedelta64(1, 's')
>>> ts
1354650685.3624549
>>> datetime.utcfromtimestamp(ts)
datetime.datetime(2012, 12, 4, 19, 51, 25, 362455)
>>> np.__version__
'1.8.0.dev-7b75899'
上記の例では、naiveオブジェクトが によってUTC の時刻としてdatetime
解釈されることを前提としています。np.datetime64
に変換datetime
しnp.datetime64
て元に戻すには ( numpy-1.6
):
>>> np.datetime64(datetime.utcnow()).astype(datetime)
datetime.datetime(2012, 12, 4, 13, 34, 52, 827542)
単一のnp.datetime64
オブジェクトと numpy 配列の両方で機能しますnp.datetime64
。
、 などについて考えるのnp.datetime64
と同じ方法を考えnp.int8
、np.int16
同じメソッドを適用して 、 などの Python オブジェクトと対応する numpy オブジェクトを変換しint
ますdatetime
。
あなたの「厄介な例」は正しく機能します:
>>> from datetime import datetime
>>> import numpy
>>> numpy.datetime64('2002-06-28T01:00:00.000000000+0100').astype(datetime)
datetime.datetime(2002, 6, 28, 0, 0)
>>> numpy.__version__
'1.6.2' # current version available via pip install numpy
インストール時のlong
値を次のように再現できます。numpy-1.8.0
pip install git+https://github.com/numpy/numpy.git#egg=numpy-dev
同じ例:
>>> from datetime import datetime
>>> import numpy
>>> numpy.datetime64('2002-06-28T01:00:00.000000000+0100').astype(datetime)
1025222400000000000L
>>> numpy.__version__
'1.8.0.dev-7b75899'
long
fornumpy.datetime64
型はPython 整数 ( )を返す.astype(datetime)
と同等であるため、返されます。.astype(object)
long
numpy-1.8
オブジェクトを取得するには、datetime
次のことができます。
>>> dt64.dtype
dtype('<M8[ns]')
>>> ns = 1e-9 # number of seconds in a nanosecond
>>> datetime.utcfromtimestamp(dt64.astype(int) * ns)
datetime.datetime(2002, 6, 28, 0, 0)
datetime64
秒を直接使用して取得するには:
>>> dt64 = numpy.datetime64('2002-06-28T01:00:00.000000000+0100', 's')
>>> dt64.dtype
dtype('<M8[s]')
>>> datetime.utcfromtimestamp(dt64.astype(int))
datetime.datetime(2002, 6, 28, 0, 0)
numpyのドキュメントによると、datetime API は実験的なものであり、将来の numpy バージョンで変更される可能性があります。