我正在尝试在MATLAB中平均复制数据并遇到一些困难。变量为$Date2 = clone $Date1;
,depth
,Var1
。有时在Var2
中有一个复制品,有时在Var1
中有一个复制品,对于给定的Var2
,有时会为Var1
和Var2
复制。所以矩阵可能看起来像这样:
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。关于如何进行的任何建议?
答案 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