0

我是 matlab 新手,找不到合适的代码来执行以下操作。

我有这个矩阵(2列):

3,2348  265
2,2281  305
2,9321  315
3,6374  315
3,9069  355
1,8879  45
2,5944  45
3,3011  45
3,7679  95
4,1550  135
2,7442  135
4,1066  185
2,1129  185
1,7600  205
3,0655  225

我想把它转换成这个(2列):

2,5945  45
3,7680  95
3,4497  135
3,1098  185
1,7601  205
3,0656  225
3,2349  265
2,2281  305
3,2849  315
3,9070  355

目标是在 matrix1 中,对于 col2 中的每个重复值,我们对 col1 中的对应值求平均值。

例如对于第 1 行,对于45(col2)--> col1=(1,8880+2,5944+3,3012)/3=2,5945

4

3 回答 3

3

这对accumarray来说是件好事:

A = [32348 265
     22281 305
     29321 315
     36374 315]; %# fill the rest of the matrix
[indices,ix] = sort(A(:,2),'ascend'); %# sort col2 in ascending order
data = A(ix,1); %# sort the values (col1) in the same way
groups = unique(indices);
mean_value = accumarray(indices, data, [numel(groups) 1], @mean);
%# the 4-argument version lets you specify a function to use (@mean in this case)

new_A = [mean_value groups]; %# this is the desired output

如需更多阅读,请查看此博客文章

于 2012-09-07T13:53:57.667 回答
0

像这样的东西:

%A is the input matrix that you describe
A = [32348 265
     22281 305
     29321 315
     36374 315
     ...]

unique_values = unique(A(:, 2));
output = zeros(length(unique_values), 2);
for i=1:length(unique_values)
  output(i, 1) = mean(A(A(:, 2) == unique_values(i), 1));
end
output(:, 2) = unique_values;

unique(A(:, 2))在第二列中查找唯一值。循环找到这些for唯一值中的每一个的平均值。

于 2012-09-07T13:27:02.387 回答
0

我能想出的最简单的代码(A是你的输入矩阵):

A = sortrows(A,2);
[B,i,j] = unique(A(:,2));
A = [accumarray(j,A(:,1),size(i),@mean),B];
于 2012-09-07T22:24:43.480 回答