我创建一个 matlab 持续时间对象并将其保存到 .mat 文件:
timeend = seconds(123);
save('time.mat', timeend, '-v7.3');
然后我从 python 读取它:
with h5py.File('time.mat', 'r') as f:
var = f['timeend'][:]
print(list(var))
然后
var
是一个 np 对象:
[array([3707764736, 2, 1, 1, 1,
1], dtype=uint32)]
如何将此 numpy 数组转换为 timedelta 对象或 np.array 的时间(以秒为单位)?
以下是如何在 Python 中将 MATLAB 持续时间对象(存储为 NumPy 数组)转换为
timedelta
对象或以秒为单位的 NumPy 数组:
import h5py
import numpy as np
from datetime import timedelta
def matlab_duration_to_python(duration_array):
"""将 MATLAB 持续时间数组转换为 Python timedelta 或秒数。
Args:
duration_array: 从 .mat 文件加载的 NumPy 数组,表示 MATLAB 持续时间。
Returns:
如果 duration_array 的长度为 1,则返回 timedelta 对象,表示持续时间。
否则,返回一个 NumPy 数组,其中包含以秒为单位的持续时间。
"""
# MATLAB 持续时间存储为从 0000 年 1 月 0 日开始的天数和秒数。
days = duration_array[0]
seconds = duration_array[1] + duration_array[2] / 1000 # 使用毫秒精度
total_seconds = days * 24 * 60 * 60 + seconds
if len(duration_array) == 1:
return timedelta(seconds=total_seconds)
else:
return total_seconds
# 读取 .mat 文件
with h5py.File('time.mat', 'r') as f:
var = f['timeend'][:]
# 将 MATLAB 持续时间转换为 Python timedelta 或秒数
python_duration = matlab_duration_to_python(var[0])
print(python_duration)
代码解释:
-
matlab_duration_to_python
函数: -
接收一个 NumPy 数组 (
duration_array
),该数组表示从 .mat 文件加载的 MATLAB 持续时间。 -
从数组中提取天数 (
days
) 和秒数 (seconds
)。 -
使用这些值计算总秒数 (
total_seconds
)。 -
如果输入数组只有一个元素,则返回一个
timedelta
对象,表示持续时间。 -
否则,返回一个包含以秒为单位的持续时间的 NumPy 数组。
-
主代码块:
-
使用
h5py
加载 .mat 文件。 -
使用
matlab_duration_to_python
函数将加载的持续时间数组 (var[0]
) 转换为 Pythontimedelta
对象或秒数。 - 打印转换后的 Python 持续时间。
注意:
- 此代码假设 MATLAB 持续时间存储为 uint32 类型的 6 元素数组,如问题中所示。如果的数据格式不同,则需要相应地调整代码。
- 此代码使用毫秒精度计算秒数。可以根据需要修改代码以使用更高的精度。