我有50个矩阵包含在一个文件夹中,所有维度都是181 x 360.如何循环浏览该文件夹并对所有50个矩阵中的每个相应数据点取平均值?
答案 0 :(得分:1)
如果矩阵包含在使用save('filename','VariableName')
存储的Matlab变量中,则可以使用load('filename.mat')
打开它们。
因此,您可以使用filesInDirectory = dir;
的结果来获取所有文件的列表,并使用适当的搜索模式,例如files = dir('*.mat');
接下来,您可以使用load
命令,然后使用whos
查看已加载的变量。在每次循环迭代后,您应该考虑存储这些以便于清除。
一旦你加载了矩阵(一次一个),你可以根据需要取平均值,可能在多个循环迭代中求和一个值,然后除以你一直在测量的总计数器(使用{{1} }})。
如果您需要一次加载所有矩阵,那么您可以使用循环将上述想法修改为count = count + size(MatrixVar, dimension);
,然后在循环外进行平均。在这种情况下,你可能需要小心 - 但我怀疑50 * 181 * 360并不是太糟糕。
可以在this链接找到load
命令的简要介绍。它主要讨论打开一个矩阵,然后绘制值,但是如果需要,还有一些关于处理标题的注释,以及如果load
不足,可以使用不同的方式打开数据。但它并没有谈论二进制文件。
关于二进制文件的注释,基于对OP问题的评论:
如果可以使用
打开文件load
然后您可以替换上面引用FID = fopen('filename.dat');
fread(FID, 'float');
的步骤,而是使用循环来查找使用load
的文件名,使用dir
和fopen
打开矩阵,然后根据需要平均,最后关闭文件和fread
矩阵。
在这种情况下,您的文件标识符可能是您在循环期间可能需要更改的唯一部分(尽管您的总数会增加,如果您想要平均数据的方式)
重新整形矩阵或反转它可能会使代码更清晰(这很好!),但可能没有必要取决于你想要的平均值 - 可能只选择矩阵的一个子部分是足够的。
可能的示例代码?
假设要打开当前目录中的所有文件,并且其他地方没有文件,您可以尝试以下方法:
clear