【发布时间】:2013-04-13 01:04:20
【问题描述】:
我有一个 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 列中的值出现的次数创建单独的矩阵,但这会很长且效率低下,所以我不愿意走这条路。
【问题讨论】: