入力ファイルのタイムスタンプがファイル名で指定された日時から数時間の形式である入力データがあります。
これは少し役に立たないので、python datetime.datetimeオブジェクトに変換し、numpy配列に入れる必要があります。forループを書くことができますが、次のようなことをしてください:
numpy.arange(datetime.datetime(2000, 1,1), datetime.datetime(2000, 1,2), datetime.timedelta(hours=1))
typeErrorをスローします。
これはできますか? python 2.6とnumpy 1.6.1で立ち往生しています。
NumPy Datetimes and Timedeltas を参照してください。基本的に、numpy.datetime64
型を使用してNumPyで日時を表すことができます。これにより、値の範囲を指定できます。
datetime64
型の有用性がはるかに低いNumPy 1.6の場合、適切なリスト内包表記を使用して日時を作成できます( Pythonでの日付範囲の作成 も参照)。
base = datetime.datetime(2000, 1, 1)
arr = numpy.array([base + datetime.timedelta(hours=i) for i in xrange(24)])
これにより
array([2000-01-01 00:00:00, 2000-01-01 01:00:00, 2000-01-01 02:00:00,
2000-01-01 03:00:00, 2000-01-01 04:00:00, 2000-01-01 05:00:00,
2000-01-01 06:00:00, 2000-01-01 07:00:00, 2000-01-01 08:00:00,
2000-01-01 09:00:00, 2000-01-01 10:00:00, 2000-01-01 11:00:00,
2000-01-01 12:00:00, 2000-01-01 13:00:00, 2000-01-01 14:00:00,
2000-01-01 15:00:00, 2000-01-01 16:00:00, 2000-01-01 17:00:00,
2000-01-01 18:00:00, 2000-01-01 19:00:00, 2000-01-01 20:00:00,
2000-01-01 21:00:00, 2000-01-01 22:00:00, 2000-01-01 23:00:00], dtype=object)
_from datetime import datetime, timedelta
t = np.arange(datetime(1985,7,1), datetime(2015,7,1), timedelta(days=1)).astype(datetime)
_
ここで重要なのは、astype(datetime)
を使用することです。それ以外の場合、結果は_datetime64
_になります。
最新のNumPyでは、これを行うことができます。
np.arange(np.datetime64('2017-01-01'), np.datetime64('2017-01-08'))
そしてそれはあなたに与えます:
array(['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04',
'2017-01-05', '2017-01-06', '2017-01-07'], dtype='datetime64[D]')
@nneonneoソリューションは、
result = first_date + np.arange(24) * datetime.timedelta(hours=1)
numPy配列操作のおかげ。 result
配列には、dtype=object
。
より複雑な範囲については、 scikits.timeseries
パッケージ(メンテナンスされなくなった)以上、 pandas
パッケージのほとんどのscikits.timeseries
。どちらのパッケージも古いバージョンのNumPy(1.5、1.6 ...)をサポートしています
別の回答で述べたように、Numpy> 1.7の場合、Numpyの組み込み日時機能を使用できます。 Numpyのドキュメントの例には、ステップでの_np.arange
_の使用が含まれていないため、次のようにします。
timearray = np.arange('2000-01-01', '2000-01-02',np.timedelta64(1,'h'), dtype='datetime64')
Numpyは、この結果のdtypeを_datetime64[h]
_に設定します。 _dtype='datetime64[m]'
_を使用して、これをより短い時間単位に明示的に設定できます。
バージョン1.8.1(および以前の予定)では、1時間より小さい結果配列にオフセットを追加しようとしても効果はありません。
timearray += np.timedelta64(10,'s')
は変更されませんtimearray
timearray2 = timearray + np.timedelta64(10,'s')
はtimearray
に10秒を追加し、_timearray2
_のdtypeを_datetime64[s]
_に変換します