2

我有大量数据需要从实验室工作中处理。我有大量 .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...
4

1 回答 1

2

首先,您需要生成文件列表。我有我自己的函数,但是有,例如,GETFILELIST或优秀的交互式UIPICKFILES来生成文件列表。

一旦你有了文件列表(我假设它是一个包含文件名的元胞数组),你可以执行以下操作:

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_matrix其制成一个 7×N×nFiles 数组,其中的第 n 个平面Master_matrix是第 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_matrixNaN而不是zeros,以便零不会影响后续统计信息(如果这是您想要对数据执行的操作)。

于 2010-11-11T18:24:03.217 回答