Matlab 自动加载多个*.mat文件&;矩阵调整大小
我有大量的实验数据需要处理。我有大量的.mat文件,其中包含一个7 x w的信号矩阵。我需要将矩阵的大小调整为7 x N,w比N大或小,以使其余的分析更容易(不关心超过N的数据)。我有我希望它如何工作的伪代码,但不知道如何实现它。任何帮助都很好,谢谢 “我的所有数据”的文件夹结构: 主文件夹Matlab 自动加载多个*.mat文件&;矩阵调整大小,matlab,matlab-load,Matlab,Matlab Load,我有大量的实验数据需要处理。我有大量的.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
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...
首先,您需要生成文件列表。我有自己的函数,但是,例如,有一个很好的交互式函数来生成文件列表 一旦有了文件列表(我假设它是一个包含文件名的单元格数组),就可以执行以下操作:
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 (i.e. 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_矩阵
制作成7×N×N文件数组,其中master_矩阵
的第N个平面是第N个文件的内容。在这种情况下,您需要将主矩阵
初始化为
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
还请注意,您可能希望将主矩阵
初始化为NaN
,而不是零
,以便零不会影响后续统计数据(如果您希望对数据执行此操作)