在关联问题中,我们讲过如何利用python
将mat
文件存为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']
然后利用numpy
将data
和data2
按行合并
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 年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!