这是一个很好的堆栈溢出问题,关于如何从几秒变为几小时,几分和几秒:How do I convert seconds to hours, minutes and seconds?
但是,我找不到如何将numpy的秒数组转换为minutes:seconds。 我有一个情节,它的滴答声是秒,所以我想转换分钟和秒。
# example data
tick_sec = np.array([-5., 0., 5., 10., 15., 20., 25., 30., 35., 40., 55., 60., 65., 70.])
# origin of data: tick_sec = ax.get_xticks()
import datetime
datetime.timedelta(seconds=tick_sec)
礼物:
TypeError Traceback (most recent call last)
<ipython-input-29-cc4fdae20757> in <module>
1 import datetime
2
----> 3 datetime.timedelta(seconds=tick_sec)
TypeError: unsupported type for timedelta seconds component: numpy.ndarray
def sec_to_minsec(sec_arr):
tick_min, tick_sec = divmod(sec_arr, 60) # returns 2 numpy.ndarray
print(type(tick_min))
tick_m_s = np.empty([tick_min.size], dtype=(np.str, 8)) # init empty string array
for i, min_sec in enumerate(zip(tick_min, tick_sec)): # loop over 2 arrays
tick_m_s[i] = f"{int(min_sec[0]):02d}:{int(min_sec[1]):02d}" # add 0 before min and sec
return tick_m_s
sec_to_minsec(tick_sec)
输出:
array(['-1:55', '00:00', '00:05', '00:10', '00:15', '00:20', '00:25',
'00:30', '00:35', '00:40', '00:55', '01:00', '01:05', '01:10'],
dtype='<U8')
有效,但是我觉得这样可能更有效?另外,它在负时间内给出了一个奇怪的输出(尽管这与我当前的问题无关)
是否有更好/有效/更短的代码方式来进行divmod
尝试?
答案 0 :(得分:0)
不确定它是否更有效率,但是您可以使用timedelta
完成它。性能很大程度上取决于完整的数据集,因此您应该运行一些测试以确定哪种情况最适合您。
例如:
from datetime import timedelta
import numpy as np
tick_sec = np.array([-5., 0., 5., 10., 15., 20., 25., 30., 35., 40., 55., 60., 65., 70.])
tick_hms = np.array([str(timedelta(seconds=s)) for s in tick_sec])
print(tick_hms)
# ['-1 day, 23:59:55' '0:00:00' '0:00:05' '0:00:10' '0:00:15' '0:00:20' '0:00:25' '0:00:30' '0:00:35' '0:00:40' '0:00:55' '0:01:00' '0:01:05' '0:01:10']