【问题标题】:Average saved output from multiple runs of function多次运行函数的平均保存输出
【发布时间】:2012-11-29 05:38:45
【问题描述】:

我有一个有 11 个输入参数的函数。

MyFunction(40, 40, 1, 1, 1, 5, 0, 1, 0, 1500, 'MyFile');

输入参数'MyFile' 在通过MyFunction 传递时使用save 命令保存一个文本文件,该文件由第10 个行的输入参数(例如1500)组成,为6 列。当我准备好分析不同的运行时,我通常会将此文件加载回 MATLAB。

我想运行 MyFunction m 次,最终让 'MyFile' 成为这些 m 的集中趋势(例如平均值或中位数)的度量运行。

m=10
for i = 1:m;
    MyFunction(40, 40, 1, 1, 1, 5, 0, 1, 0, 1500, 'MyFile');
end;

我可以使用 for 循环为每次迭代生成一个新的 'MyFile' 名称(例如 MyFile1、MyFile2、...、MyFileM),例如 MyFile = sprintf('MyFile%m');,然后将所有 MyFiles 加载回 MATLAB 并然后取他们的平均值并将其保存为 UltimateMyFile,但这似乎很麻烦。他们是更直接地平均这些输出文件的更好方法吗?我应该将文件存储为对象,使用dlmwrite,还是-append

谢谢。

【问题讨论】:

    标签: matlab for-loop save octave output


    【解决方案1】:

    由于您要查找中位数,因此您需要访问所有数据。

    你可以定义一个3维数组说

    data = zeros(1500,6,m);
    

    然后在for循环的每一步更新它:

    data(:,:,i) = MyFunction(40, 40, 1, 1, 1, 5, 0, 1, 0, 1500);
    

    当然,您需要重新定义函数以获得正确的输出。

    但是,如果您需要在其他时间访问数据,那么您最好将其写入文件并从那里读取。

    如果您只对平均值感兴趣,您可以在分析每个案例时保留一个运行总计,然后将其除以案例数量 (m)。

    【讨论】:

    • 以二进制格式保存文件可能会更快。虽然我还没有测试过。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    • 2016-08-26
    相关资源
    最近更新 更多