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
初始转换所花费的时间大约是向量化表达式的两倍,但从那时到该timedelta
数组的永久转换的每个操作将快大约 20 倍。
如果您永远不会再使用那些timedelta
s,请考虑问自己为什么首先制作了 deltas(而不是timedelta64
s),然后使用该numpy.vectorize
表达式。它不那么原生,但由于某种原因它更快。