You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Python读取Matlab duration对象并转换为时间格式?

问题:将Matlab保存的Duration对象转换为Python的timedelta或秒数数组

我在Matlab中创建了一个duration对象并保存到.mat文件:

timeend = seconds(123);
save('time.mat', 'timeend', '-v7.3');

随后用Python的h5py读取该文件:

import h5py
import numpy as np

with h5py.File('time.mat', 'r') as f:
    var = f['timeend'][:]
    print(list(var))

得到的结果是一个numpy数组:

[array([3707764736,          2,          1,          1,          1,
                1], dtype=uint32)]

请问如何将这个Numpy数组转换为timedelta对象或表示秒数的numpy数组?


解决方案

Matlab的duration对象在v7.3格式的.mat文件中,核心的时长数值以单精度浮点数的uint32二进制形式存储在数组的第一个元素中,后续元素是对象的附加属性(如显示格式等),无需关注。

步骤1:提取并转换秒数

直接读取数组第一个元素,通过view方法将其从uint32转换为float32,即可得到原始的秒数值:

import numpy as np
from datetime import timedelta

# 假设var是读取到的结果
raw_data = var[0]
# 转换为单精度浮点数,得到秒数
seconds_value = raw_data[0].view('float32')

步骤2:转换为timedelta对象

# 生成timedelta对象
time_delta = timedelta(seconds=seconds_value)
print(time_delta)  # 输出: 0:02:03

步骤3:转换为秒数numpy数组

# 生成存储秒数的numpy数组
seconds_array = np.array([seconds_value], dtype=np.float32)
print(seconds_array)  # 输出: [123.]

内容的提问来源于stack exchange,提问作者Xin Niu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 09:31:00