如何从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
相关产品推荐
相关产品推荐

