numpy
独自のdatetime
フォーマットがありtimedelta
ます。それらを使用するだけです;)。
セットアップ例:
import datetime
import numpy
times = numpy.array([datetime.timedelta(0, 1, 36000)])
コード:
times.astype("timedelta64[ms]").astype(int) / 1000
#>>> array([ 1.036])
timedelta64
人々はこれが最善の解決策であることに気付いていないようなので、配列と配列のタイミングをいくつか示しますdatetime.datetime
。
SETUP="
import datetime
import numpy
times = numpy.array([datetime.timedelta(0, 1, 36000)] * 100000)
numpy_times = times.astype('timedelta64[ms]')
"
python -m timeit -s "$SETUP" "numpy_times.astype(int) / 1000"
python -m timeit -s "$SETUP" "numpy.vectorize(lambda x: x.total_seconds())(times)"
python -m timeit -s "$SETUP" "[delta.total_seconds() for delta in times]"
結果:
100 loops, best of 3: 4.54 msec per loop
10 loops, best of 3: 99.5 msec per loop
10 loops, best of 3: 67.1 msec per loop
最初の変換には、ベクトル化された式の約 2 倍の時間がかかりますが、そのtimedelta
配列に対するその後の各操作は、約 20 倍速くなります。
これらの s を二度と使用しない場合は、最初timedelta
に ( s ではなく) デルタを作成した理由を自問してから、式を使用することを検討してください。ネイティブではありませんが、何らかの理由で高速です。timedelta64
numpy.vectorize