在Matlab中平均复制数据,多个变量

时间:2017-10-05 10:45:50

标签: matlab accumarray

我正在尝试在MATLAB中平均复制数据并遇到一些困难。变量为$Date2 = clone $Date1;depthVar1。有时在Var2中有一个复制品,有时在Var1中有一个复制品,对于给定的Var2,有时会为Var1Var2复制。所以矩阵可能看起来像这样:

depth

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]

如果我有一个n乘2的矩阵,函数1 0.2 1, 2 0.6 3, 3 0.4 5.5, 4 0.3 4, ... 会起作用,但这是n乘3。关于如何进行的任何建议?

2 个答案:

答案 0 :(得分:0)

这应该有效

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

答案 1 :(得分:0)

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