![]() |
自动加载多个* .mat文件并调整矩阵大小
我有大量需要通过实验室工作处理的数据。我有大量的.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... [B]回答:[/B] 首先,您需要生成文件列表。我有自己的功能,但是有例如[URL="http://www.mathworks.com/matlabcentral/fileexchange/25610-list-files-with-specified-suffix"]GETFILELIST[/URL]或出色的交互式[URL="http://www.mathworks.com/matlabcentral/fileexchange/10867-uipickfiles-uigetfile-on-steroids"]UIPICKFILES[/URL]来生成文件列表。 一旦有了文件列表(我将假定它是一个包含文件名的单元格数组),则可以执行以下操作: 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 ,以便零不会影响后续统计信息(如果这就是您要处理的数据)。 [url=https://stackoverflow.com/questions/4157419]更多&回答...[/url] |
所有时间均为北京时间。现在的时间是 23:39。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.