39

ファイル名で指定された日時からの時間の形式で入力ファイルにタイムスタンプを持つ入力データがあります。

これは少し役に立たないので、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で立ち往生しています。

4

5 に答える 5

42
from datetime import datetime, timedelta

t = np.arange(datetime(1985,7,1), datetime(2015,7,1), timedelta(days=1)).astype(datetime)

ここでの重要なポイントは、 を使用することです。astype(datetime)そうしないと、結果は になりますdatetime64

于 2015-12-17T01:58:54.537 に答える
24

NumPyの日時とタイムデルタを参照してください。基本的に、タイプを使用してNumPyで日時を表すことができnumpy.datetime64ます。これにより、値の範囲を実行できます。

あまり役に立たないdatetime64タイプのNumPy1.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)
于 2012-08-27T06:44:41.367 に答える
10

別の回答で述べたように、Numpy > 1.7 の場合、Numpy の組み込みの日時機能を使用できます。np.arangeNumpy のドキュメントの例には、 with ステップの使用が含まれていないため、次の 1 つを示します。

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')に 10 秒を追加timearrayし、 の dtype を に変換しtimearray2ますdatetime64[s]
于 2016-06-27T16:05:44.710 に答える
9

@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...) をサポートしています。

于 2012-08-27T08:39:09.157 に答える