matlab使用小技巧——数据的拆分与合并

一、建立子文件夹-mkdir的使用
需求:在文件夹‘截取后数据’中建立子文件夹s01—s32。
代码:

for k=1:32
    if k<10
		pathname=sprintf('s0%d\\',k);
	end
	if k>=10
     	 pathname=sprintf('s%d\\',k);
	end
	pathname2=['C:\Users\hubert\Desktop\稀疏矩阵\截取后数据\',pathname];
	mkdir('C:\Users\hubert\Desktop\稀疏矩阵\截取后数据\',pathname);
end

matlab使用小技巧——数据的拆分与合并_第1张图片
matlab使用小技巧——数据的拆分与合并_第2张图片
二、截取数据-reshape的使用
要求:将原始数据‘data:32X40X(10X128)1280’,截取成40个‘32X(5X128)640’的数据
代码:

pathname1='C:\Users\hubert\Desktop\稀疏矩阵\修改使用数据\';
m=struct();

for k=1:32
    if k<10
        filename1=sprintf('s0%d',k);
    end
    if k>=10
        filename1=sprintf('s%d',k);
    end
    x=load([pathname1,filename1]);
    m.data=x.data;
    m1=reshape(m.data,[40 32 10 128]); 
    if k<10
        pathname=sprintf('s0%d\\',k);
    end
    if k>=10
        pathname=sprintf('s%d\\',k);
    end
    pathname2=['C:\Users\hubert\Desktop\稀疏矩阵\截取后数据2\',pathname];
    mkdir('C:\Users\hubert\Desktop\稀疏矩阵\截取后数据2\',pathname);
    for i=1:40
        m2=m1(i,1:32,1:5,:); 
        m3=reshape(m2,[32 5*128]);  
        data=m3;
        if k<10
            filename2=sprintf('s0%d-%d',k,i);
        end
        if k>=10
            filename2=sprintf('s%d-%d',k,i);
        end
        save([pathname2,filename2],'data');
    end
end

matlab使用小技巧——数据的拆分与合并_第3张图片
matlab使用小技巧——数据的拆分与合并_第4张图片
三、合并数据
要求:将上面的40个‘32X(5X128)640’的数据合并成一个data:40X32X64的数据。
代码:

pathname1='C:\Users\hubert\Desktop\稀疏矩阵\截取后数据\';
pathname3='C:\Users\hubert\Desktop\稀疏矩阵\合并1\';
%32个被试者

for k=1:32
    if k<10
        filename1=sprintf('s0%d\\',k);
        filename11=sprintf('s0%d',k);
    end
    if k>=10
        filename1=sprintf('s%d\\',k);
        filename11=sprintf('s%d',k);
    end
    pathname2=[pathname1,filename1];    %C:\Users\hubert\Desktop\脑电数据集\截取后数据\s01\
    pathname4=[pathname3,filename1];    %C:\Users\hubert\Desktop\脑电数据集\合并后的数据\s01\
    %mkdir(pathname3,filename1);     %首次执行时需要创建新的文件夹

    data1=[];
    
    %每人40次试验
    for j=1:40
       if k<10
           filename2=sprintf('s0%d-%d',k,j);  
           filename3=sprintf('s0%d-%d\\',k,j); 
       end
       if k>=10
           filename2=sprintf('s%d-%d',k,j);
           filename3=sprintf('s%d-%d\\',k,j);
       end

       xx=load([pathname2,filename2]);  % xx=s01-1
       
       m1=xx.data;
       data1=[data1;m1];
    
    end
    m2 = reshape(data1,[40 32 5 128]);
    m3=m2(1:40,1:32,1:5,:);
    data=reshape(m3,[40 32 640]);
    save([pathname3,filename11],'data');

end

matlab使用小技巧——数据的拆分与合并_第5张图片

你可能感兴趣的:(脑电信号)