【问题标题】:Averaging replicate data in Matlab, multiple variables在 Matlab 中平均复制数据,多个变量
【发布时间】:2018-03-16 23:06:49
【问题描述】:

我试图在 MATLAB 中平均复制数据并遇到一些困难。变量是depthVar1Var2。有时在Var1 中有一个复制,有时在Var2 中有一个复制,有时对于给定的depthVar1Var2 都有一个复制。所以矩阵可能看起来像这样:

1   0.2 1,
2   0.5 3,
2   0.7 NaN,
3   0.1 5,
3   0.7 6,
4   0.3 4,
...

depth 是唯一标识符,所以我想用[depth, Var1, Var2] 创建一个矩阵,如下所示:

1   0.2 1,
2   0.6 3,
3   0.4 5.5,
4   0.3 4,
...

如果我有一个 n×2 矩阵,则函数 accumarray 会起作用,但这是 n×3。有关如何进行的任何建议?

【问题讨论】:

    标签: matlab accumarray


    【解决方案1】:

    这应该可行

    a=[1 0.2 1; 2 0.5 3; 2 0.7 NaN; 3 0.1 5; 3 0.7 6; 4 0.3 4];
    depths = unique(a(:,1));
    b=nan(length(depths),3);
    for ct = 1:length(depths)
        b(ct,:)=mean(a(a(:,1)==depths(ct),:),1,'omitnan');
    end
    

    结果

    b =
    
        1.0000    0.2000    1.0000
        2.0000    0.6000    3.0000
        3.0000    0.4000    5.5000
        4.0000    0.3000    4.0000
    

    【讨论】:

    • 太棒了!非常感谢!
    【解决方案2】:

    使用 accumarray 循环变量的有点幼稚的实现。

    A = [1   0.2 1
    2   0.5 3
    2   0.7 NaN
    3   0.1 5
    3   0.7 6
    4   0.3 4];
    
    result = zeros([numel(unique(A(:,1))) size(A,2)]);
    result(:,1) = unique(A(:,1));
    for ii = 2:size(A,2)
        result(:,ii) = accumarray(A(:,1),A(:,ii),[],@mean);
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-14
      • 2021-02-03
      相关资源
      最近更新 更多