【问题标题】:Mean value of multiple columns多列的平均值
【发布时间】:2013-07-06 20:10:45
【问题描述】:

我已经搜索了很多以找到解决方案,但我认为没有什么真正适合我。

我有 n 数据文件,每个文件包含两列(使用 uigetfile 导入)。为了提取数据,我使用了for loop,如下所示:

for i=1:n
    data{i}=load(filename{i});
    x{i}=data{i}(:,1);
    y{i}=data{i}(:,2);  
end

现在,我想获得所有(比方说)x 值的每一行的平均值。例如:

x{1} = [1,4,7,8]

x{2} = [1,2,6,9]

然后我想要类似的东西

x_mean = [1,3,6.5,8.5]

我试过了(k 是行数)

for i=1:n
        data{i}=load(filename{i});
        x{i}=data{i}(:,1);
        y{i}=data{i}(:,2);  
    j=1:k
        x_mean=sum(x{i}(j))/n
end

但我不能在 for 循环中使用多个计数器(据我所知)。此外,我不使用mean,因为我不知道在这种情况下如何使用它。

如果有人可以帮助我,那就太好了!

【问题讨论】:

    标签: matlab for-loop mean


    【解决方案1】:

    您可以将单元格x 中每个数值数组的内容捕获到一个新的数值数组x_num 中,如下所示:

    x_num = [x{:}]
    

    计算均值就这么简单

    mean_x = mean( [x{:}] )
    

    对于您的示例,这为您提供了 x 中 all 数组中 all 数字的平均值,因此这将是一个标量。

    如果您想计算所有行的平均值(如您的示例所示),您必须垂直连接数组,您可以使用cat:

    mean_x_columnwise = mean( cat(1,x{:}) )
    

    如果您想对所有列取平均值(按行均值),您只需告诉mean 您正在查看不同的维度:

    mean_x_rowwise = mean( cat(1,x{:}), 2)
    

    【讨论】:

    • 我不太确定这是解决方案。我想要的是具有 100 个标量(行数)的单列,是所有 n 列的每一行的平均值。例如。如果我有两列 x{1} 和 x{2},并且第一行分别读取 3 和 7,那么 mean_x 中的第一个值应该是 (3+7)/2=5。这是有道理的,还是我只是不明白你的解决方案? :)
    • @NielsMøller:您尝试我的解决方案了吗? :) 顺便说一句,您的示例建议您希望拥有一个包含所有 rows 均值的单个 row。如果您想要所有列的方法...查看我的最新编辑。
    • 我确实尝试了您的解决方案 :) 最后一次编辑就是我的意思 - 逐行的意思。但似乎我只得到最后一列的平均值(即与其值相同)。这是因为我的 for 循环和计数器 i 吗?换句话说,我确实得到了一列,但它的值与我导入的最后一列相同(即 x{n})。
    • @NielsMøller:啊。我认为您将这行代码放在循环中?它是矢量化的,所以你应该把它放在循环之后,让循环only收集数据到所有x{i}。
    • 抱歉回复晚了。不确定它是否有效。根据工作空间,mean_x_rowwise 为 。我原以为它应该是 100x1 ?
    猜你喜欢
    • 2018-07-12
    • 2021-09-06
    • 2015-04-28
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    • 2017-10-04
    相关资源
    最近更新 更多