【发布时间】:2019-07-06 17:24:56
【问题描述】:
我很难将 MATLAB .mat 文件中的“str”变量“Et”(结束时间)和“St”(开始时间)加载到 Python 中。
我想要与 MATLAB 中相同的输出。相反,我在尝试解决这个问题时遇到了问题。有关 Python 代码和输出,请参见下文。
# Import numpy and h5py to load in .mat files
import numpy as np
import h5py
# Load in Matlab ('-v7.3') data
fname = 'directory/file.mat'
f = h5py.File(fname,'r')
# create dictionary for data
data= {"average":np.array(f.get('average')),"median":np.array(f.get('median')), \
"stdev":np.array(f.get('stdev')),"P10":np.array(f.get('p10')), \
"P90":np.array(f.get('p90')),"St":np.str(f.get('stime')), \
"Et":np.str(f.get('etime'))}
# All other variables are arrays
print(data["Et"])
输出:
<HDF5 dataset "etime": shape (1, 6), type "<u4">
我希望 python 中的字符串等于 MATLAB 中的字符串。 换句话说,我想要 print(data["Et"]) = '01011212000000' 这是日期和时间。
我该如何解决这个问题?
【问题讨论】:
-
至少对于 Octave 'hdf5' 文件,
f['average']有 2 个数据集,'type' 和 'value'。分开阅读是个好主意。对于字符串type是b'sq_string',value是一个'int8' dtype 的(n,1) 数组。我认为可以将其转换为 Pythonbytestring。有一些 SO 问题探讨了加载hdf5mat 文件,但我不记得是否有看过字符串。 -
什么是
f.get('etime')?它是一个组还是一个数据集?如果是一个组,它有任何键吗? -
试试
np.array(f.get('etime'))。将其加载为数组;之后我们也许可以“解码”它,就像我在In[138]中所做的那样。 -
让我们改进
np.array(f.get('etime'), dtype='<u4')。或者按照`@machnic 的建议使用bytes。
标签: python string matlab numpy h5py