python-3.x - 将秒数的numpy数组转换为分钟和秒

标签 python-3.x numpy datetime timedelta divmod

这是一个很好的堆栈溢出问题,关于如何从秒到小时、分钟和秒:How do I convert seconds to hours, minutes and seconds?

但是,我找不到如何将秒的 numpy 数组转换为分钟:秒。 我有一个以秒为单位的刻度图,所以我想转换分钟和秒。

数据

# 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()

timedelta 尝试

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

divmod 尝试(工作中)

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')

可行,但我觉得这样可以更有效率?此外,它为负时间提供了一个奇怪的输出(尽管这与我当前的问题无关)

系统

  • Jupyter Notebook 环境中的 Python 3.6

问题

是否有更好/更高效/更短的代码方式来完成我的 divmod 尝试?

最佳答案

不确定它是否更有效,但您可以使用 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']

关于python-3.x - 将秒数的numpy数组转换为分钟和秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55112906/

相关文章:

python - 广播旋转矩阵乘法

python - 使用 ctypes 数组作为 numpy 数组时的 PEP 3118 警告

javascript - 将 JavaScript Date 对象转换为不同的时区

python-3.x - 带时区的 Pyspark to_timestamp

python - Kivy 错误,[严重] [文本] 无法找到任何有值(value)的文本提供程序 (python 3.6.1) (windows 10)

python - numpy 数组 - 替换某些值

JavaScript 日期解析错误

java - 从 Redis 数据库转换为 java 中的日期

python-3.x - 如何删除嵌套的 for 循环并使用 numpy 数组 insead

python - 如何比较两个列表中的项目 Python 3.3