0

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

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。关于如何进行的任何建议?

4

2 回答 2

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
于 2017-10-05T15:44:02.327 回答
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
于 2017-10-05T11:26:47.580 回答