我有一个22007x3
矩阵,其中第 3 列中有数据,第 1 列和第 2 列中有两个单独的索引。
例如。
x =
1 3 4
1 3 5
1 3 5
1 16 4
1 16 3
1 16 4
2 4 1
2 4 3
2 11 2
2 11 3
2 11 2
当第 1 列中的值相同并且第 2 列中的值相同时,我需要找到第 3 列中的值的平均值,最终得到如下结果:
ans =
1 3 4.6667
1 16 3.6667
2 4 2
2 11 2.3333
请记住,在我的数据中,第 1 列和第 2 列中的值出现的次数可能不同。
我已经尝试过的两个选项是meshgrid
/accumarray
选项,使用两个不同的unique
函数和一个 3D 数组:
[U, ix, iu] = unique(x(:, 1));
[U2,ix2,iu2] = unique(x(:,2));
[c, r, j] = meshgrid((1:size(x(:, 1), 2)), iu, iu2);
totals = accumarray([r(:), c(:), j(:)], x(:), [], @nanmean);
这给了我这个:
??? Maximum variable size allowed by the program is exceeded.
Error in ==> meshgrid at 60
xx = xx(ones(ny,1),:,ones(nz,1));
和循环选项,
for i=1:size(x,1)
if x(i,2)== x(i+1,2);
totals(i,:)=accumarray(x(:,1),x(:,3),[],@nanmean);
end
end
这显然是非常非常错误的,尤其是因为x(i+1,2)
位。
我还在考虑根据第 1 列中的值出现的次数创建单独的矩阵,但这会很长而且效率低下,所以我不愿意走这条路。