我创建一个 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 时间?
您可以轻松处理 numpy 和 txt 文件,而不是处理 h5py 和 mat 文件。
Matlab
例如,我在 Matlab 中创建了一个持续时间数组(H、M、S),并使用提供的
seconds
函数将其转换为秒。
% duration array: 12h, 50m, 24s
hours = 12;
min = 50;
sec = 24;
time = duration(hours, min, sec);
% conversion to seconds
time_sec = seconds(time);
% save variable to ASCII file
save time_sec.txt time_sec -ascii
Python
在Python中,你只需要加载txt文件,用numpy读取它并创建timedelta对象。
from datetime import timedelta
import numpy as np
time_sec = np.take(np.loadtxt("time_sec.txt"),0)
# time_delta object
time_delta = timedelta(seconds=time_sec)
print(time_delta)
结果:
12:50:24
额外
即使使用 Matlab 中的
days
函数,它也能工作:
MATLAB:
time = days(5);
time_sec = seconds(time);
...
PYTHON RESULT:
5 days, 0:00:00
只要可以,就放轻松。