马春杰杰 Exit Reader Mode

[mcj]使用Matlab/Python合并mat文件并存为mat

 

在关联问题中,我们讲过如何利用pythonmat文件存为excel,但是excel有个问题,那就是最多存储255列数据,当我们数据很多的时候怎么办呢?

在这里,我选择mat文件。

关联问题:

应用需求:

在这里,我有多个mat文件,每个mat文件都只有一行[1x4096]的数据,现在我想把这些mat文件合并起来。

应用分析:

根据前面我们知道,合并这些mat文件不能再存到excel里了,只能存入mat中。

编程实现:

这里以合并两个mat文件为例,其他多个同理,只需要for一下即可。

Python版

首先,读取mat文件并加载数据

import scipy.io as scio
import numpy as np
dataFile = 'mat\BigBuckBunny05.mat'
dataFile2 = 'mat\BigBuckBunny06.mat'
data = scio.loadmat(dataFile)
data = data['BigBuckBunny05']
data2 = scio.loadmat(dataFile2)
data2 = data2['BigBuckBunny06']

然后利用numpydatadata2按行合并

data = np.vstack((data,data2))

最后将data保存为mat字典即可。

scio.savemat('filename.mat', mdict={'filename': data})

Matlab版:

其实matlab更加简单,这是MATLAB完整程序,包含了循环读取操作。

clc
filepath='E:\00 大论文工作\10 第一部分工作\201904\3dcnn提取的特征\原始特征\';  %文件夹名字
for k = 1: 9  % 一共的个数
temp = cell2mat(struct2cell(load([filepath,'mat',num2str(k),'.mat'])));   % 利用num2str表示1,2,3,4.。。[ ]里面的内容,用逗号或者空格连接都可以,最后就是一个字符串,就是mat的路径名,temp读出来是一个structure
matname = char(fieldnames(temp));% 获取结构成员名称
data{k} = getfield(temp,matname);% 获取该名称下的成员内容,用  temp.usertrj_stay 也可以获得structure的值
end
for k = 10: 99  % 一共的个数
temp = cell2mat(struct2cell(load([filepath,'mat',num2str(k),'.mat'])));   % 利用num2str表示1,2,3,4.。。[ ]里面的内容,用逗号或者空格连接都可以,最后就是一个字符串,就是mat的路径名,temp读出来是一个structure
matname = char(fieldnames(temp));% 获取结构成员名称
data{k} = getfield(temp,matname);% 获取该名称下的成员内容,用  temp.usertrj_stay 也可以获得structure的值
end
for k = 100: 450  % 一共的个数
temp = cell2mat(struct2cell(load([filepath,'mat',num2str(k),'.mat'])));   % 利用num2str表示1,2,3,4.。。[ ]里面的内容,用逗号或者空格连接都可以,最后就是一个字符串,就是mat的路径名,temp读出来是一个structure
matname = char(fieldnames(temp));% 获取结构成员名称
data{k} = getfield(temp,matname);% 获取该名称下的成员内容,用  temp.usertrj_stay 也可以获得structure的值
end
s1=cell2mat(struct2cell(load('qiyipuzong.mat')));
ll_staypoint = cat(1,data{:});
save('all_staypoint.mat');

注意事项:

这里关键是如何找到mat的字典头

我们以上面的例子为例,我们是如何知道mat中的索引是BigBuckBunny05呢?如果这个文件是自己建的,当然没问题,如果是直接copy来的,按一下步骤查找索引:

首先读取mat文件,然后在下面设置断点:

运行debug,查看data的数据结构:

这里可以看到,BigBuckBunny05即为ndarray的索引。可以打开看看

确认之后即可读取该索引的数据。

本文最后更新于2022年10月28日,已超过 1 年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!