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

如何将datetime.datetime对象转换为可保存到.mat文件的数组?

问题:保存datetime数组到Matlab .mat文件时类型转换错误

你有一个包含datetime.datetime对象的numpy数组:

array([datetime.datetime(2011, 1, 1, 0, 3, 32, 262000),
       datetime.datetime(2011, 1, 1, 0, 5, 7, 290000),
       datetime.datetime(2011, 1, 1, 0, 6, 45, 383000),
       datetime.datetime(2011, 1, 1, 0, 8, 23, 335000)], dtype=object)

尝试用scipy.io.savemat保存时出现错误:

TypeError: Could not convert 2011-01-01 00:03:32.262000 (type <class 'datetime.datetime'>) to array

需要保留原时间格式而非转换为Unix时间戳,以下是可行的解决方法:


方法1:转换为numpy datetime64类型(推荐)

scipy.io.savemat原生支持numpy的datetime64类型,转换后Matlab加载时会自动识别为datetime对象,完整保留时间精度:

import numpy as np
from scipy.io import savemat

# 将datetime数组转换为微秒精度的datetime64(匹配原数据的微秒信息)
dt64_array = np.array(time_array, dtype='datetime64[us]')

save_structure = {'Time': dt64_array}
# 注意路径转义,用双反斜杠或原始字符串
savemat(path + r'\2011.mat', save_structure)

方法2:拆分时间分量保存

将datetime对象的年、月、日、时、分、秒(含微秒)拆分为单独数组,在Matlab中可重新组合为datetime:

from scipy.io import savemat
import numpy as np

# 提取各时间分量
years = np.array([dt.year for dt in time_array])
months = np.array([dt.month for dt in time_array])
days = np.array([dt.day for dt in time_array])
hours = np.array([dt.hour for dt in time_array])
minutes = np.array([dt.minute for dt in time_array])
# 合并秒和微秒
seconds = np.array([dt.second + dt.microsecond / 1e6 for dt in time_array])

save_structure = {
    'year': years,
    'month': months,
    'day': days,
    'hour': hours,
    'minute': minutes,
    'second': seconds
}
savemat(path + r'\2011.mat', save_structure)

在Matlab中重建datetime:

Time = datetime(year, month, day, hour, minute, second);

方法3:使用pandas辅助转换

如果已安装pandas,可利用其DatetimeIndex快速转换:

import pandas as pd
from scipy.io import savemat

# 转换为pandas DatetimeIndex再转numpy数组
dt_index = pd.DatetimeIndex(time_array)
dt64_array = dt_index.to_numpy()

save_structure = {'Time': dt64_array}
savemat(path + r'\2011.mat', save_structure)

或者直接用pandas的to_matlab方法:

df = pd.DataFrame({'Time': time_array})
df.to_matlab(path + r'\2011.mat')

内容的提问来源于stack exchange,提问作者Shivank Chadda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:15:55