我在MATLAB(350695x5)中有大量数据。 一个例子是这样的:
z = [
1.79 0.16 0.16 21.39 21.50
1.83 0.16 0.16 21.39 22.40
1.92 0.16 0.16 21.39 22.00
2.07 0.16 0.16 21.39 22.00
2.36 0.15 0.15 21.39 21.08
2.96 0.13 0.13 21.39 21.04
3.21 0.13 0.13 21.39 23.00
3.72 0.12 0.12 21.39 24.00
3.87 0.11 0.11 21.39 21.39
4.14 0.10 0.10 21.39 22.00
4.14 0.10 0.10 21.39 21.50
4.16 0.10 0.10 21.39 21.39]
我需要按以下方式对其进行排序: 基于1列1-2,2-3,3-4 并找到2,3,4列的范围(0-1,1-2,2-3,3-4)的平均值
结果应如下所示:
1 0.16 0.16 21.39 21.97
2 0.15 0.15 21.39 21.49
3 0.12 0.12 21.39 22.68
4 0.10 0.10 21.39 21.63
问题在于我无法以适当的方式对其进行排序。
解决方案的一部分可以用
来描述[ii jj] = ndgrid(z(:,1)+1,1:size(z,2)-1) %should sort first column from 0-1,1-2, 2-3, 3-4
z23 = z(:,2:end)
out = [unique(z(:,1)),accumarray([ii(:),jj(:)],z23(:),[],@mean)], %find mean value
答案 0 :(得分:4)
试试这个:
idx = floor(z(:, 1));
sub = [idx z(:, 2:5)];
[xx, yy] = ndgrid(idx, 1:size(sub, 2));
out = accumarray([xx(:) yy(:)], sub(:), [], @mean)
out =
1.0000 0.1600 0.1600 21.3900 21.9667
2.0000 0.1467 0.1467 21.3900 21.3733
3.0000 0.1200 0.1200 21.3900 22.7967
4.0000 0.1000 0.1000 21.3900 21.6300
结果与您的完全不符。我不确定我到底知道你想要什么,但我写的代码计算了1 <= x < 2
,2 <= x < 3
等范围的平均值。
答案 1 :(得分:0)
使用逻辑索引查找适用特定范围的z
中的值,例如:
i01 = (z >= 0) & (z < 1); % Find logical indices
z01 = z(i01); % Get values from 0 up to 1 (but not including 1)
然后,平均值的计算很简单:mu_z01 = mean(z01);
。当然,相同的方法可以应用于1到2,2到3等其他范围。