在python中读取带有cell元胞的.mat文件,特别是对 7.3 版及可能更高版本的 mat 文件,使用h5py读取遇到的问题
对于 7.3 版及可能更高版本的 mat 文件,我在 Matlab 中将元胞数组保存为 .mat 文件,如下所示:
test = {'hello'; 'world!'};
save('data.mat', 'test', '-v7.3')
如何使用 H5py 将其作为 Python 中的字符串列表导入?
我试过
f = h5py.File('data.mat', 'r')
print f.get('test')
print f.get('test')[0]
这打印出:
[ ]
['hello', 'world!']
如何取消引用
]
获取.mat 中的元胞内容?
To load a MATLAB cell array from a .mat file using the hdf5storage library in Python, you can follow:
要使用hdf5storage
库在Python中加载包含MATLAB元胞数组的.mat文件,您可以按照以下步骤进行操作:
hdf5storage
库:确保您已经在Python环境中安装了hdf5storage
库。您可以使用以下命令通过pip安装它:https://github.com/frejanordsiek/hdf5storagepip install hdf5storage
hdf5storage
库加载.mat文件并获取元胞数组的示例代码段:import hdf5storage
# 加载.mat文件
mat_data = hdf5storage.loadmat('your_file.mat')
# 访问元胞数组
cell_array = mat_data['name_x']
# 遍历元胞数组的元素
for item in cell_array:
# 打印每个元胞的内容
print(item)
请确保将'your_file.mat'
替换为实际的.mat文件路径。
通过使用hdf5storage
库,您可以直接从.mat文件中加载MATLAB元胞数组,无需事先将其转换为HDF5格式。这样不会出现
]
sio不能读7.3和以上版本的mat,h5py读不了多重元胞,这个hdf5storage都可以搞。
h5py: 用于读取的Matlab -v7.3形式保存的变量。缺点:无法读取过于复杂的元胞变量结构。
import h5py
fHC = h5py.File('H:/616.mat', 'r')
tdata = fHC['name_x'] [:] # name_x 是变量名
data = np.array(tdata).T # For converting to a NumPy array
scipy.io: 用于读取的Matlab默认的 -v7形式保存的变量。缺点:无法读取-v7.3形式保存的变量。
import scipy.io as sio
file_path = "bc_1.mat"
data_dict = sio.loadmat(file_path)
data_list = data_dict['name_x'].tolist()
hdf5storage: 可以用于读取的Matlab -v7.3和-v7 形式保存的变量。缺点:待发现。
import hdf5storage
# 加载.mat文件
mat_data = hdf5storage.loadmat('your_file.mat')
# 访问元胞数组
cell_array = mat_data['name_x']
# 遍历元胞数组的元素
for item in cell_array:
# 打印每个元胞的内容
print(item)