Matlab中多个矩阵的平均值

时间:2014-09-07 23:43:00

标签: matlab loops matrix mean

我有50个矩阵包含在一个文件夹中,所有维度都是181 x 360.如何循环浏览该文件夹并对所有50个矩阵中的每个相应数据点取平均值?

1 个答案:

答案 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的文件名,使用dirfopen打开矩阵,然后根据需要平均,最后关闭文件和fread矩阵。

在这种情况下,您的文件标识符可能是您在循环期间可能需要更改的唯一部分(尽管您的总数会增加,如果您想要平均数据的方式)

重新整形矩阵或反转它可能会使代码更清晰(这很好!),但可能没有必要取决于你想要的平均值 - 可能只选择矩阵的一个子部分是足够的。

可能的示例代码?

假设要打开当前目录中的所有文件,并且其他地方没有文件,您可以尝试以下方法:

clear