目标:
有10个mat(Matlab中文件数据格式)文件数据,每个文件保存的数据如下,两个396*2000的矩阵,和两个396*1的矩阵。现在想将这10个mat文件中的每个数据按纵向合并,比如将所有文件的f1_train(396*2000)合并成一个3960*2000的矩阵,如何实现?
1、读取文件夹目录
将biqiuxia.mat,chenbingqing.mat,chenhaisheng.mat,chenhuiyi.mat,chenshenhua.mat,fujinmei.mat等10个mat文件保存在MatTest文件夹中
import scipy.io as sio # 读取mat数据
import operator as op # 字符串比较
import numpy as np
import os
import os.path
rootdir = '../MatTest/' # 文件保存路径
dd = os.listdir(rootdir)
for i in range(0,len(dd)):
path = os.path.join(rootdir,dd[i])
if op.eq(path[-3:],'mat'):
print(path)
读取出来的文件可能包含ipynb_checkpoints
文件,因此需要对文件名进行判断,尾部为'mat'的是符合要求文件,进行读取
2、数组整合
label_train = np.zeros((1,1))
f1_train = np.zeros((1,2000))
f2_train = np.zeros((1,2000))
idx_train = np.zeros((1,1))
for i in range(0,len(dd)):
path = os.path.join(rootdir,dd[i])
if op.eq(path[-3:],'mat'):
data = sio.loadmat(path)
f1_train = np.vstack((f1_train,data['f1_train']))
f2_train = np.vstack((f2_train,data['f2_train']))
label_train = np.vstack((label_train,data['label_train']))
idx_train = np.vstack((idx_train,data['idx_train']))
label_train = label_train[1:len(label_train),:]
f1_train = ppw_train[1:len(f1_train),:]
f2_train = dppw_train[1:len(f1_train),:]
idx_train = idx_train[1:len(idx_train),:]
为合并'f1_train'数组,这里首先定义了一个f1_train矩阵,并调用函数np.vstack函数将数组按纵向合并,合并完成之后去掉第一行(pthon中数组下标从0开始)即可,因为第一行的数据都为0