登录论坛

查看完整版本 : 自动加载多个* .mat文件并调整矩阵大小


poster
2019-12-10, 20:48
我有大量需要通过实验室工作处理的数据。我有大量的.mat文件,其中包含7 x w尺寸的信号矩阵。我需要将矩阵的大小调整为7 x N,并且w大于和小于N,以使其余的分析更容易(不必关心超过N的数据)。我有我希望它如何工作的伪代码,但不知道如何实现它。任何帮助将非常感谢!

我所有数据的文件夹结构:

主文件夹

Alpha 1 1111.mat 1321.mat Alpha 2 1010.mat 1234.mat 1109.mat 933.mat Alpha 3 1223.mat 等等

伪代码:

Master_matrix = [] For all n *.mat Load n'th *.mat from alpha 1 If w > N Resize matrix down to N Else Zero pad to N End if Master_matrix = master_matrix .+ new resized matrix End for rest of my code...

回答:

首先,您需要生成文件列表。我有自己的功能,但是有例如GETFILELIST (http://www.mathworks.com/matlabcentral/fileexchange/25610-list-files-with-specified-suffix)或出色的交互式UIPICKFILES (http://www.mathworks.com/matlabcentral/fileexchange/10867-uipickfiles-uigetfile-on-steroids)来生成文件列表。

一旦有了文件列表(我将假定它是一个包含文件名的单元格数组),则可以执行以下操作:

nFiles = length(fileList); Master_matrix = zeros(7,N); for iFile = 1:nFiles %# if all files contain a variable of the same name, %# you can simplify the loading by not assigning an output %# in the load command, and call the file by %# its variable name (ie replace 'loadedData') tmp = load(fileList{iFile}); fn = fieldnames(tmp); loadedData = tmp.(fn{1}); %# find size w = size(loadedData,2); if w>=N Master_matrix = Master_matrix + loadedData(:,1:N); else %# only adding to the first few columns is the same as zero-padding Master_matrix(:,1:w) = Master_matrix(:,1:w) = loadedData; end end 注意:如果您实际上不想添加数据,而只是将其存储在master数组中,则可以将Master_matrix为7×N×nFiles数组,其中Master_matrix的第n个平面是第n个文件的内容。在这种情况下,您可以将Master_matrix初始化为

Master_matrix = zeros(7,N,nFiles); 然后将if子句写为

if w>=N Master_matrix(:,:,iFile) = Master_matrix(:,:,iFile) + loadedData(:,1:N); else %# only adding to the first few columns is the same as zero-padding Master_matrix(:,1:w,iFile) = Master_matrix(:,1:w,iFile) = loadedData; end 还要注意,您可能希望将Master_matrix初始化为NaN而不是zeros ,以便零不会影响后续统计信息(如果这就是您要处理的数据)。



更多&回答... (https://stackoverflow.com/questions/4157419)